> For the complete documentation index, see [llms.txt](https://spacecore.gitbook.io/wiki/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://spacecore.gitbook.io/wiki/en/web-development/install-nginx.md).

# Installing Nginx

Nginx is a web server with a lot of features, made according to the latest canons of technology. It is used by the largest companies such as VKontakte, Google, Facebook and others.

{% hint style="warning" %}
Before installing, make sure that you do not have **Apache2** installed!
{% endhint %}

### Installing a Web server

Its installation is extremely simple, use the following command:

```
apt-get install nginx -y
```

## Customization Nginx

You need to go to the **/etc/nginx/sites-available** directory and create a file such as «**site.conf**».

Paste the following into the config and edit:

{% code title="site.conf" %}

```
server {
    listen       *:80;
    server_name  spacecore.pro; # site domain
    client_max_body_size 1000M; # the maximum file size transmitted through the site
    error_page 404 = @notfound;
    location / {
        root   /home/site/spacecore; # the path to the site
        try_files $uri $uri.html $uri/ @extensionless-php;
        index  index.html index.php;
    }
    # Подключения PHP, if you don't need it, then erase lines 13 to 21
    location ~ \.(php|html|htm)$ {
        try_files $uri =404;
        root   /home/site/spacecore; # the path to the site
        fastcgi_pass unix:/run/php/php7.0-fpm.sock; # the path to php
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $request_filename;
        include /etc/nginx/fastcgi_params;
    }
}
```

{% endcode %}

Restarting **Nginx**:

```
service nginx restart
```

### Notes on PHP

{% hint style="info" %}
**PHP** is not required to work with **Nginx**. This note is important only for those whose site uses **PHP**.
{% endhint %}

Additional information can be found [here](https://wiki.spacecore.pro/web-sites/install-php).

### Connecting an SSL certificate to Nginx

{% hint style="info" %}
**SSL** connection is not required, it is carried out if it is available and you wish.
{% endhint %}

We need to create or edit a site config to look like this:

```
server {
    listen 80;
    server_name spacecore.pro; # site domain
    return 301 https://$server_name$request_uri; # redirect from http to https
}

server {
    listen 443 ssl http2;
    server_name spacecore.pro; # site domain

    root /var/www/spacecore; # the path to the site
    index index.html index.htm index.php; # index pages

    access_log /var/log/nginx/spacecore.app-access.log; # logs of successful connections
    error_log  /var/log/nginx/spacecore.app-error.log error; # logs of erroneous connections

    # if you want to disable something, instead of the path to the file write «off»

    client_max_body_size 1000m; # the maximum file size transmitted through the site
    client_body_timeout 120s; # timeout value

    sendfile off; # after enabling, Nginx will send HTTP response headers in a single packet, rather than in separate parts.
    # SSL Configuration
    ssl_certificate /etc/letsencrypt/live/spacecore.pro/fullchain.pem; # the public key of the certificate
    ssl_certificate_key /etc/letsencrypt/live/spacecore.pro/privkey.pem; # the private key of the certificate
    ssl_session_cache shared:SSL:10m; # SSL session cache size
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384";
    ssl_prefer_server_ciphers on; # reduces the loading time of the site pages

    location ~ \.(php|html|htm)$ {
try_files $uri =404;
root /var/www/spacecore; # the path to the site
fastcgi_pass unix:/run/php/php7.2-fpm.sock; # the path to php
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $request_filename;
include /etc/nginx/fastcgi_params;
    }
}
```

Rebooting **Nginx**:

```
service nginx restart
```

## Checking for Apache2

If **Nginx** is installed with **Apache2**, they will conflict due to port 80. So you need to delete one of the **Web servers**. Check if **Apache2** is installed:

```
service apache2 status
```

{% hint style="info" %}
If there is not a huge message with information, then it is not installed.
{% endhint %}

If **Apache2** is installed, you need to remove it:

```
apt-get remove --purge apache2* -y
```

## Removal Nginx

In order to completely remove **Nginx** from the server, it must first be stopped:

```
service nginx stop
```

And then write a command that will permanently delete it:

```
apt-get remove --purge nginx*
```
