Benutzer-Werkzeuge

Webseiten-Werkzeuge


ubuntu:nginx_webserver

Ubuntu 18.04 und 22.04: Nginx

Installation

Immer neuste (stabile) Version über PPA

# add-apt-repository ppa:nginx/stable
# apt-get update
# aptitude install nginx

Version aus der Distribution

# apt-get update
# aptitude install nginx

Prüfung

# service nginx status
● nginx.service - A high performance web server and a reverse proxy server
   Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
   Active: active (running) since Sat 2019-04-06 14:50:15 CEST; 9min ago
     Docs: man:nginx(8)
  Process: 8408 ExecStop=/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pid (code=exited, status=0/SUCCESS)
  Process: 8826 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
  Process: 8820 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
 Main PID: 8828 (nginx)
    Tasks: 2 (limit: 2319)
   CGroup: /system.slice/nginx.service
           ├─8828 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
           └─8830 nginx: worker process

Apr 06 14:50:15 xxx systemd[1]: Starting A high performance web server and a reverse proxy server...
Apr 06 14:50:15 xxx systemd[1]: nginx.service: Failed to parse PID from file /run/nginx.pid: Invalid argument
Apr 06 14:50:15 xxx systemd[1]: Started A high performance web server and a reverse proxy server.
# netstat -anptu
Aktive Internetverbindungen (Server und stehende Verbindungen)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      8828/nginx: master
tcp6       0      0 :::80                   :::*                    LISTEN      8828/nginx: master

Konfiguration

Serverweite Konfigurationen werden an folgender Datei vorgenommen:

nginx.conf
[...]
        server_tokens off;
[...]

Bei Nginx heißen die „virtual hosts“ innerhalb der Konfiguration „server“. Unter Ubuntu ist eine Dateistruktur ähnlich der von Apache vorhanden - gemeint sind die Ordner sites-available sowie sites-enabled.

/etc/nginx# ll
total 72
drwxr-xr-x   8 root root 4096 Apr  7 18:32 ./
drwxr-xr-x 112 root root 4096 Apr 12 21:13 ../
drwxr-xr-x   2 root root 4096 Nov  6 19:54 conf.d/
-rw-r--r--   1 root root 1077 Apr  6  2018 fastcgi.conf
-rw-r--r--   1 root root 1007 Apr  6  2018 fastcgi_params
-rw-r--r--   1 root root 2837 Apr  6  2018 koi-utf
-rw-r--r--   1 root root 2223 Apr  6  2018 koi-win
-rw-r--r--   1 root root 3957 Apr  6  2018 mime.types
drwxr-xr-x   2 root root 4096 Nov  6 19:54 modules-available/
drwxr-xr-x   2 root root 4096 Apr  7 14:07 modules-enabled/
-rw-r--r--   1 root root 1515 Apr  7 16:22 nginx.conf
-rw-r--r--   1 root root  180 Apr  6  2018 proxy_params
-rw-r--r--   1 root root  636 Apr  6  2018 scgi_params
drwxr-xr-x   2 root root 4096 Apr  7 22:05 sites-available/
drwxr-xr-x   2 root root 4096 Apr  7 20:31 sites-enabled/
drwxr-xr-x   2 root root 4096 Apr  7 14:07 snippets/
-rw-r--r--   1 root root  664 Apr  6  2018 uwsgi_params
-rw-r--r--   1 root root 3071 Apr  6  2018 win-utf

Nach Änderung der Konfiguration kann mit folgendem Befehl geprüft werden, ob die Konfiguration Fehler enthält:

# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

HTTPS mit Let's Encrypt

Certbot installieren

Als root ausführen:

# apt-get update
# apt-get install software-properties-common
# add-apt-repository universe
# add-apt-repository ppa:certbot/certbot
# apt-get update
# apt-get install python3-certbot-nginx

Cerbot: Zertifikate anfordern und Webserver anpassen

certbot --nginx --agree-tos --redirect --hsts --staple-ocsp --email example@domain.de --domain example-website.de

Cronjob zur Erneuerung der Zertifikate

# whereis certbot
certbot: /usr/bin/certbot /usr/share/man/man1/certbot.1.gz
# crontab -e

In die Crontab kommt dann beispielsweise folgendes rein:

# m h  dom mon dow   command
30 4 * * * /usr/bin/certbot renew >> /var/log/le-renew.log

Dann lassen wir noch unser Logfile rotieren:

/etc/logrotate.d/le-renew
/var/log/le-renew.log
{
    rotate 12
    weekly
    compress
    missingok
}

PHP

Installation

PHP im CGI-Modus mit einigen Modulen:

# aptitude install php7.2-bz2 php7.2-cli php7.2-common php7.2-curl php7.2-fpm php7.2-gd php7.2-intl php7.2-json php7.2-mbstring php7.2-mysql php7.2-opcache php7.2-readline php7.2-xml php7.2-zip

Läuft?

# service php7.2-fpm status
● php7.2-fpm.service - The PHP 7.2 FastCGI Process Manager
   Loaded: loaded (/lib/systemd/system/php7.2-fpm.service; enabled; vendor preset: enabled)
   Active: active (running) since Sat 2019-04-13 17:24:28 CEST; 3min 27s ago
     Docs: man:php-fpm7.2(8)
 Main PID: 943 (php-fpm7.2)
   Status: "Processes active: 0, idle: 2, Requests: 0, slow: 0, Traffic: 0req/sec"
    Tasks: 3 (limit: 2319)
   CGroup: /system.slice/php7.2-fpm.service
           ├─943 php-fpm: master process (/etc/php/7.2/fpm/php-fpm.conf)
           ├─964 php-fpm: pool www
           └─965 php-fpm: pool www

Apr 13 17:24:28 xxx systemd[1]: Starting The PHP 7.2 FastCGI Process Manager...
Apr 13 17:24:28 xxx systemd[1]: Started The PHP 7.2 FastCGI Process Manager.

PHP.ini

Folgende Zeilen dürfen nicht auskommentiert bleiben:

/etc/php/7.2/fpm/pool.d/www.conf
[...]
env[HOSTNAME] = $HOSTNAME
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp
[...]
/etc/php/7.2/fpm/php.ini
[...]
short_open_tag = On
[...]
open_basedir = /var/www/:/tmp/:/dev/urandom
[...]
expose_php = Off
[...]
/etc/php/7.2/cli/php.ini
[...]
short_open_tag = On
[...]
open_basedir = /var/www/:/tmp/:/dev/urandom
[...]
expose_php = Off
[...]

Tuning und Fehlerbehebung

server reached pm.max_children setting, consider raising it

Logfile (PHP-FPM):

[23-Apr-2019 19:37:52] WARNING: [pool www] server reached pm.max_children setting (5), consider raising it
[23-Apr-2019 21:08:16] WARNING: [pool www] server reached pm.max_children setting (5), consider raising it
[23-Apr-2019 21:10:12] WARNING: [pool www] server reached pm.max_children setting (5), consider raising it
/etc/php/7.2/fpm/pool.d/www.conf
; The number of child processes to be created when pm is set to 'static' and the
; maximum number of child processes when pm is set to 'dynamic' or 'ondemand'.
; This value sets the limit on the number of simultaneous requests that will be
; served. Equivalent to the ApacheMaxClients directive with mpm_prefork.
; Equivalent to the PHP_FCGI_CHILDREN environment variable in the original PHP
; CGI. The below defaults are based on a server without much resources. Don't
; forget to tweak pm.* to fit your needs.
; Note: Used when pm is set to 'static', 'dynamic' or 'ondemand'
; Note: This value is mandatory.
pm.max_children = 8
# service php7.2-fpm restart

Nginx: Handling

Konfiguration prüfen vor Neustart des Dienstes

# service nginx configtest
 * Testing nginx configuration                 [fail]

Was sagt das Errorlog?

/var/log/nginx/error.log
2019/12/07 17:06:07 [emerg] 14795#14795: "fastcgi_split_path_info" directive is not allowed here in /etc/nginx/snippets/fastcgi-php.conf:2
2019/12/07 17:07:07 [emerg] 14859#14859: "fastcgi_split_path_info" directive is not allowed here in /etc/nginx/snippets/fastcgi-php.conf:2

Reverse-Proxy

Virtual Host anlegen

/etc/nginx/sites-available/your_domain
server {
    listen 80;
    listen [::]:80;

    server_name your_domain www.your_domain;
        
    location / {
        proxy_pass app_server_address;
        include proxy_params;
    }
}

Proxyparameter festlegen

/etc/nginx/proxy_params
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
ubuntu/nginx_webserver.txt · Zuletzt geändert: von Sebastian Hetzel

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki