How to install PHP 7.3 and Nginx on Ubuntu 19.04
Add repositories to get the latest versions
First we will add two new repositories to our apt sources list.
1sudo add-apt-repository ppa:ondrej/nginx2sudo add-apt-repository ppa:ondrej/php
Install required packages
In this step we will install all the required packages. When using Nginx it is common, to use PHP's FastCGI process manager (php-fpm). Maybe you don't need all the php extensions, but this set is pretty common.
1sudo apt install nginx php7.3-fpm php7.3-common php7.3-curl php7.3-intl php7.3-gd php7.3-dev php7.3-json php7.3-mbstring php7.3-mysql php7.3-opcache php7.3-soap php7.3-sqlite3 php7.3-xml php7.3-zip
Configure Nginx to serve a specific domain
First lets have a look at the configuration conventions of Nginx. You can find the default configuration in
/etc/nginx/sites-available/default . Additionally it is symlinked to /etc/nginx/sites-enabled/default . Through this
symlink the configuration file will be recognized by Nginx at startup and reload. This means configuration changes are
not recognized while runtime.
Lets add a new configuration file for our domain. The domain name in the file means nothing to Nginx but it is a
convention to name it like the domain it configures.
1sudo touch /etc/nginx/sites-available/christlieb.eu.conf
Use you favorite text editor to paste in the following content. Any section is described by the comment above it.
1# The server directive says Nginx that this is a new server configuration 2server { 3 # This has to be the domain you want to use 4 server_name christlieb.eu; 5 # This is the document root 6 root /var/www/christlieb.eu/current/public; 7 # This is the file which gets loaded by default. index.html gets loaded if there is no index.php 8 index index.php index.html; 910 # This configuration prevent the logger to log not found favicon11 location = /favicon.ico {12 log_not_found off;13 access_log off;14 }1516 # Same as favicon but for robots.txt17 location = /robots.txt {18 allow all;19 log_not_found off;20 access_log off;21 }2223 # This says the Nginx server to rewrite any requests which do not access a valid file to rewrite on to the index.php24 location / {25 try_files $uri $uri/ /index.php?$args;26 }2728 # This gets all requests from the location above and sends them to the php-fpm socket which will execute the php29 location ~ \.php$ {30 include fastcgi.conf;31 fastcgi_intercept_errors on;32 fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;33 }3435 # This says that all files with the given endings should be cached by the client36 location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {37 expires max;38 log_not_found off;39 }4041}
1ln -s /etc/nginx/sites-available/christlieb.eu.conf /etc/nginx/sites-enabled/christlieb.eu.conf
As said above we need to symlink the file into the sites-available directory.
To test the configuration execute sudo nginx -t . The output should be something like the following.
1nginx: the configuration file /etc/nginx/nginx.conf syntax is ok2nginx: configuration file /etc/nginx/nginx.conf test is successful
Now we can calmly reload the Nginx configuration with suco service nginx reload.
Test the setup
To test the setup we will create a index.php file with a phpinfo() call.
1mkdir -p /var/www/christlieb.eu/current/public2echo "<?php phpinfo();" > /var/www/christlieb.eu/current/public/index.php
Now open the browser and point to you your domain, You will see a php info page.