|
Rozmiar: 13065
Komentarz: + odnośnik do konfiguracji php-fpmd
|
Rozmiar: 15736
Komentarz: + fancyindex, charset, poprawki dla php-fpm; zaczątek sekcji dla CMSów
|
| Usunięcia zostały oznaczone w ten sposób. | Dodatki zostały oznaczone w ten sposób. |
| Linia 194: | Linia 194: |
| fastcgi_pass unix:/var/run/phph-fpm.socket; | fastcgi_pass unix:/var/run/php-fpm-www.socket; |
| Linia 228: | Linia 228: |
| 1. Konieczne jest uruchomienie [[KonfiguracjaPhp#Uruchomienie_php-fpm|php-fpmd]] analogicznie do [[FcgiWrap|fcgiwrapd]]. 1. Poniższa konfiguracja jest dość generyczna. Ale nie ma możliwości jej ''włączania'' z oddzielnego pliku konfiguracyjnego. Raczej ma zasadzie ''copy-paste'' |
1. Konieczne jest uruchomienie [[KonfiguracjaPhp#Konfiguracja_php-fpm.conf|php-fpmd]] analogicznie do [[FcgiWrap|fcgiwrapd]]. 1. Poniższa konfiguracja jest dość generyczna. Ale nie ma możliwości jej ''włączania'' z oddzielnego pliku konfiguracyjnego<<FootNote(Kluczowy jest parametr '''fastcgi_index''', który w niektórych przypadkach może yć inny, aniżeli `index.php`. Odpowiednia konfiguracja została wykonana w [[UniMaster|repozytorium konfiguracji]] i sprawdza się.)>>. Raczej ma zasadzie ''copy-paste'': |
| Linia 234: | Linia 234: |
| fastcgi_pass unix:/var/run/phph-fpm.socket; | fastcgi_pass unix:/var/run/php-fpm-www.socket; |
| Linia 266: | Linia 266: |
| === Obsługa uWSGI === W celu uruchamiania aplikacji napisanych w języku [[http://www.python.org|python|target="_blank"]] wykorzystywany jest [[https://uwsgi-docs.readthedocs.io/en/latest/|uWSGI|target="_blank"]]. Po uruchomieniu aplikacji w samym uWSGI należy wykonać konfigurację w '''nginx'''. Najlepiej pokazuje to [[MoinModUwsgi#wiki_jako_root|konfiguracja moinmoin]]. |
|
| Linia 271: | Linia 274: |
| }}} === FancyIndex === W celu uruchomienia "''ładnego''" wyświetlania zawartości katalogu należy dodać moduł do konfiguracji ngnix-a (sekcja globalna): {{{#!highlight nginx numbers=off load_module "/usr/local/libexec/nginx/ngx_http_fancyindex_module.so"; }}} A następnie dla danej ''location'' wskazać użycie !FancyIndex (na przykładzie konfiguracji dla [[PoudriereBinaryPkg|poudriere]]): {{{#!highlight nginx numbers=off location /pkg/data/ { alias /pkg/data/logs/bulk/; fancyindex on; fancyindex_exact_size off; } |
|
| Linia 358: | Linia 376: |
| == Konfiguracja dla Joomla == == Konfiguracja dla drupal == == mod rewrite == = Kodowanie znaków = [[FreshPorts:www/nginx|nginx]] korzysta z kodowania ''UTF-8''. Ale problem jest z kodowaniem innym (starsze standardy), np. ''ISO-8859-2''. [[FreshPorts:www/nginx|nginx]] wyświetla specjalne ''pytajniki'' zamiast np. polskich ogonków. Rozwiązaniem problemu jest utworzenie '''charset map''', która mapuje znaki ''ISO-8859-*'' (lub inne kodowania) na kodowanie ''UTF-8''. Konficuracja takiej mapy wygląda następująco: {{{#!highlight nginx numbers=off charset_map iso-8859-2 utf-8 { A0 C2A0 ; # no-break space A1 C484 ; # latin capital letter A with ogonek [...] } }}} Mapa kodowania z ''ISO-8859-2'' do ''UTF-8'' została utworzona w [[UniMaster|repozytorium konfiguracji]]. == Zmiana kodowania == W celu skorzyania z mapy kodowania należy wykonać następującą konfigurację: === Sekcja http === {{{#!highlight nginx numbers=off http { [...] include charset-l2-utf8.conf; [...] } }}} === Sekcja server === {{{#!highlight nginx numbers=off server { [...] source_charset iso-8859-2; [...] } }}} |
|
| Linia 363: | Linia 426: |
| * [[https://uwsgi-docs.readthedocs.io/en/latest/||target="_blank"]] * [[http://winginx.com/en/htaccess|Konwerter mod_rewrite|target="_blank"]] * [[https://www.fileformat.info/info/unicode/|Tablica znaków UTF-8 pomocna przy konwersji ze starych kodowań|target="_blank"]] |
Spis Treści
- Instalacja oraz konfiguracja nginx
- Obsługa PHP
- Konfiguracja nginx.conf
- Kodowanie znaków
- Źródła w sieci internet
Instalacja oraz konfiguracja nginx
/boot/loader.conf
Zgodnie z sugestiami calomel.org warto włączyć następujące moduły:
aio_load="YES"
accf_data_load="YES"
accf_http_load="YES"
Opcje konfiguracyjne
Opcji jest bardzo dużo. Na dzień 18.05.2018 zostały wybrane następujące:
OPTIONS_FILE_SET+=DSO
OPTIONS_FILE_SET+=FILE_AIO
OPTIONS_FILE_SET+=IPV6
OPTIONS_FILE_SET+=THREADS
OPTIONS_FILE_SET+=WWW
OPTIONS_FILE_SET+=HTTP
OPTIONS_FILE_SET+=HTTP_CACHE
OPTIONS_FILE_SET+=HTTP_GZIP_STATIC
OPTIONS_FILE_SET+=HTTP_REWRITE
OPTIONS_FILE_SET+=HTTP_SLICE
OPTIONS_FILE_SET+=HTTP_SSL
OPTIONS_FILE_SET+=HTTP_STATUS
OPTIONS_FILE_SET+=HTTPV2
OPTIONS_FILE_SET+=STREAM
OPTIONS_FILE_SET+=STREAM_SSL
OPTIONS_FILE_SET+=STREAM_SSL_PREREAD
OPTIONS_FILE_SET+=BROTLI
OPTIONS_FILE_SET+=HTTP_ACCEPT_LANGUAGE
OPTIONS_FILE_SET+=HTTP_AUTH_DIGEST
OPTIONS_FILE_SET+=HTTP_AUTH_LDAP
OPTIONS_FILE_SET+=HTTP_AUTH_PAM
OPTIONS_FILE_SET+=HTTP_JSON_STATUS
OPTIONS_FILE_SET+=HTTP_UPLOAD
OPTIONS_FILE_SET+=HTTP_UPLOAD_PROGRESS
Obsługa PHP
Została opisana w oddzielnej dokumentacji.
Konfiguracja nginx.conf
Konfiguracja nginx.conf może być "rozbita" na wiele plików i poprzez mechanizm include dołączanana do głównego pliku konfiguracyjnego.
Inną dobrą zaletą konfiguracji jest możliwość wyciągnięcia wspólnych ustawień dla wszystkich serwerów wirtualnych do sekcji http (np. ustawienia dla szyfrowania HTTPS). Dzięki temu konfiguracja znacznie się upraszcza, jak również jest możliwe dość szybko zmienić ustawiania "globalnie".
Sekcja globalna
(Nazwa na wyrost
). Ustawienia globalne, to głównie dołączenie zewnętrznych modułów (plików umieszczonych w katalogu /usr/local/libexec/nginx/):
# --- ustawienia globalne ---------------------------------------------------
#
user www;
worker_processes 4;
# --- za/l/adowanie potrzebnych modu/l/ow ----
#
load_module "/usr/local/libexec/nginx/ngx_http_brotli_filter_module.so";
load_module "/usr/local/libexec/nginx/ngx_http_brotli_static_module.so";
error_log /var/log/nginx/global/error.log;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
Konfiguracja protkołu HTTP(S)
Ustawienia dla protokołu http(s). Wspólne i globalne dla każdego serwera wirtualnego:
http {
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/global/access.log main;
server_tokens off;
charset utf-8;
source_charset utf-8;
aio on;
sendfile off;
#tcp_nopush on;
lingering_time 10s;
max_ranges 0;
output_buffers 2 128k;
postpone_output 0;
reset_timedout_connection on;
send_timeout 10s;
keepalive_timeout 0;
#keepalive_timeout 65;
brotli on;
brotli_static on;
brotli_types text/css text/javascript text/mathml text/plain text/xml application/x-javascript application/atom+xml application/rss+xml application/xhtml+xml image/svg+xml;
gzip off;
gzip_static on;
gzip_buffers 256 8k;
gzip_comp_level 9;
gzip_http_version 1.0;
gzip_min_length 0;
gzip_types text/css text/javascript text/mathml text/plain text/xml application/x-javascript application/atom+xml application/rss+xml application/xhtml+xml image/svg+xml;
gzip_vary on;
gzip_disable "MSIE [1-6]\.(?!.*SV1)";
ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
ssl_ecdh_curve secp521r1:secp384r1;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 5m;
ssl_protocols TLSv1.2 TLSv1.1 TLSv1;
Konfiguracja przekierowania do https
server {
listen 10.2.2.XXX:80;
server_name www.mojadomena.pl;
location / {
return 301 https://$server_name$request_uri;
}
location /pma/ {
return 301 https://mgt.mojadomena.pl/pma/;
}
include 014-acmele.conf;
include 005-x-frame.conf;
}
Konfiguracja serwera HTTPS
Poniżej konfiguracja samego serwera https. Od razu dołączana jest konfiguracja dla obsługi certyfikatów Let's Encrypt:
server {
listen 10.2.2.239:443 ssl;
server_name crm.limesmp.pl;
ssl_certificate certs/www.mojadomena.pl.chained.pem;
ssl_certificate_key certs/www.mojadomena.pl.key;
ssl_dhparam certs/www.mojadomena.pl.2048.dh.pem;
# dla paneli, kt/ore maj/a by/c pomini/ete przez wyszukiwarki
add_header X-Robots-Tag none;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload";
add_header Public-Key-Pins 'pin-sha256="VZRoSKCpoY3HzxId7gGq25lX0sITzskJGKuwqDt/Sq8="; pin-sha256="kvC0r0fZ885Ojc2JkQLC8bFvZutAx5w2DgvVsE8LlMo="; max-age=2592000; includeSubdomains';
### add_header Content-Security-Policy-Report-Only "upgrade-insecure-requests; default-src https:; form-action https:; script-src 'self' 'unsafe-eval' 'unsafe-inline'; img-src 'self'; style-src 'self' 'unsafe-inline' font-src 'self' object-src 'none'; report-uri /cgi-bin/csp-report.cgi"
# logowanie
access_log /var/log/nginx/www.mojadomena.pl/access.log main;
error_log /var/log/nginx/www.mojadomena.pl/error.log;
root /var/www/htdocs/virtuls/crm.limesmp.pl/web;
index app.php;
location / {
try_files $uri $uri/ /app.php$is_args$args;
}
# obs/luga Let's Encrypt dla protoko/lu bez szyfrowania
location /.well-known/ {}
location /pma/ {
return 301 https://ev.ath.pl/pma/;
}
error_page 404 /50x.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/local/www/nginx-dist;
}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
fastcgi_pass unix:/var/run/php-fpm-www.socket;
fastcgi_param HTTPS on;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
location ~ /\.ht {
deny all;
}
include 000-cmsploit.conf;
include 004-pillaging-dvcs.conf;
include 005-x-frame.conf;
}
Konfiguracja wspólne
Poniżej konfiguracje, które zostały umieszczone w repozytorium skryptów:
Obsługa plików .ht*
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
location ~ /\.ht {
deny all;
}
Obsługa PHP-FPM
Konieczne jest uruchomienie php-fpmd analogicznie do fcgiwrapd.
Poniższa konfiguracja jest dość generyczna. Ale nie ma możliwości jej włączania z oddzielnego pliku konfiguracyjnego1. Raczej ma zasadzie copy-paste:
# pass the PHP scripts to FastCGI server via unix socket
#
location ~ \.php$ {
fastcgi_pass unix:/var/run/php-fpm-www.socket;
fastcgi_param HTTPS on;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.5:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
include fastcgi_params;
}
Obsługa CGI
Obsługa skryptów CGI jest bardzo prosta. Należy zainstalować oraz uruchomić fcgiwrap. W konfiguracji nginx należy wykonać konfigurację:
location ~ \.cgi$ {
try_files $uri =404;
gzip off;
#rewrite ^/cgi-bin/nagios/(.*)$ /nagios/$1;
fastcgi_pass unix:/var/run/fcgiwrap/fcgiwrap.sock;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $request_filename;
fastcgi_param REMOTE_USER $remote_user;
}
Obsługa uWSGI
W celu uruchamiania aplikacji napisanych w języku python wykorzystywany jest uWSGI. Po uruchomieniu aplikacji w samym uWSGI należy wykonać konfigurację w nginx. Najlepiej pokazuje to konfiguracja moinmoin.
Nagłówki bezpieczeństwa dla HTTPS
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload";
FancyIndex
W celu uruchomienia "ładnego" wyświetlania zawartości katalogu należy dodać moduł do konfiguracji ngnix-a (sekcja globalna):
load_module "/usr/local/libexec/nginx/ngx_http_fancyindex_module.so";
A następnie dla danej location wskazać użycie FancyIndex (na przykładzie konfiguracji dla poudriere):
location /pkg/data/ {
alias /pkg/data/logs/bulk/;
fancyindex on;
fancyindex_exact_size off;
}
http auth
Domyślnie nie ma żadnych ograniczeń dla danego zasobu (location). Niemniej można go ograniczać poprzez ACLki (adresy IP) oraz autentykację użytkownika. W tym celu należy wykonać konfigurację (na przykładzie konfiguracji dla net-mgmt/nagios3):
location /nagios/ {
alias /usr/local/www/nagios/;
index index.php;
satisfy any;
allow 10.0.0.0/8;
allow 127.0.0.4;
deny all;
auth_basic "Special Area";
auth_basic_user_file /var/www/authdb/auth.db;
}
Konfiguracja dla nagios3
Konfiguracja dla net-mgmt/nagios3 jest dość prosta. Sprowadza się do konfiguracji odpowiedniego location wraz z obsługą plików php oraz cgi:
location /nagios/ {
alias /usr/local/www/nagios/;
index index.php;
satisfy any;
allow 10.0.0.0/8;
allow 127.0.0.4;
deny all;
auth_basic "Athenasoft Special Area";
auth_basic_user_file /var/www/authdb/ccauth.db;
location ~ \.php$ {
fastcgi_pass unix:/var/run/phph-fpm.socket;
fastcgi_param HTTPS on;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $request_filename;
include fastcgi_params;
}
include expires.conf;
location ~ \.cgi$ {
try_files $uri =404;
gzip off;
#rewrite ^/cgi-bin/nagios/(.*)$ /nagios/$1;
fastcgi_pass unix:/var/run/fcgiwrap/fcgiwrap.sock;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $request_filename;
fastcgi_param REMOTE_USER $remote_user;
}
}
Konfiguracja dla wpad.dat
Dla sieci lokalnych bardzo przydatne jest wystawienia konfiguracji dla serwera proxy, czyli Web Proxy Auto Discovery (WPAD). Konfiguracja jest bardzo krótka, a jednocześnie bardzo elastyczna dla klienta końcowego:
# dodanie typu pliku (mime)
types {
application/x-ns-proxy-autoconfig dat;
}
server {
listen ip.ad.dre.ss:80;
server_name wpad.domain.local wpad w3c.domain.local;
access_log /var/log/nginx/wpad.domain.local/access.log;
error_log /var/log/nginx/wpad.domain.local/error.log;
root /var/www/htdocs/virtuals/wpad/data;
# je/zeli kto/s poprosi o domy/slny dokument, to przekierowania na wpad.dat
#
location / {
return 301 /wpad.dat;
}
# pr/oba zwr/ocenia pliku wpad.dat albo b/l/ad
#
location /wpad.dat {
try_files /wpad.dat =404;
}
}
DNS black holing
Całość została opisane w oddzielnym dokumencie.
Konfiguracja dla Joomla
Konfiguracja dla drupal
mod rewrite
Kodowanie znaków
nginx korzysta z kodowania UTF-8. Ale problem jest z kodowaniem innym (starsze standardy), np. ISO-8859-2. nginx wyświetla specjalne pytajniki zamiast np. polskich ogonków.
Rozwiązaniem problemu jest utworzenie charset map, która mapuje znaki ISO-8859-* (lub inne kodowania) na kodowanie UTF-8. Konficuracja takiej mapy wygląda następująco:
charset_map iso-8859-2 utf-8 {
A0 C2A0 ; # no-break space
A1 C484 ; # latin capital letter A with ogonek
[...]
}
Mapa kodowania z ISO-8859-2 do UTF-8 została utworzona w repozytorium konfiguracji.
Zmiana kodowania
W celu skorzyania z mapy kodowania należy wykonać następującą konfigurację:
Sekcja http
http {
[...]
include charset-l2-utf8.conf;
[...]
}
Sekcja server
server {
[...]
source_charset iso-8859-2;
[...]
}
Źródła w sieci internet
(c) 2004 - 2026 BSD Serwis Krzysztof Stryjek. W przypadku błędów, poprawek proszę kontaktować się z administratorem wiki.
Kluczowy jest parametr fastcgi_index, który w niektórych przypadkach może yć inny, aniżeli index.php. Odpowiednia konfiguracja została wykonana w repozytorium konfiguracji i sprawdza się. (1)
