How to install PHP 7.3 & 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.