Różnice pomiędzy wersjami 3 i 14 (Spinanie 11 wersji)
⇤ ← Wersja 3 z 2017-09-03 11:12:13 →
Rozmiar: 13435
Edytor: wtps0n
Komentarz: + opis nginx.conf
← Wersja 14 z 2018-08-21 18:08:25 → ⇥
Rozmiar: 17594
Edytor: wtps0n
Komentarz: + hash dla server_name, nadpisanie ustawień dla php
Usunięcia zostały oznaczone w ten sposób. Dodatki zostały oznaczone w ten sposób.
Linia 9: Linia 9:
Zgodnie z sugestiami [[https://calomel.org/freebsd_network_tuning.html|Calomel.org|target="_blank"]] warto włączyć następujące moduły: Zgodnie z sugestiami [[https://calomel.org/freebsd_network_tuning.html|calomel.org|target="_blank"]] warto włączyć następujące moduły:
Linia 17: Linia 17:
Opcji jest bardzo dużo. Na dzień '''02.09.2017''' zostały wybrane następujące: Opcji jest bardzo dużo. Na dzień '''18.05.2018''' zostały wybrane następujące:
Linia 22: Linia 22:
OPTIONS_FILE_SET+=THREADS
OPTIONS_FILE_SET+=WWW
Linia 33: Linia 35:
OPTIONS_FILE_SET+=THREADS
OPT
IONS_FILE_SET+=WWW
OPTIONS_FILE_SET+=BROTLI
Linia 42: Linia 43:
OPTIONS_FILE_SET+=BROTLI
Linia 46: Linia 46:
PHP ([[FreshPorts:lang/php71|lang/php71]]) powinno mieć wybrane następujące opcje:
{{{
[x] CLI Build CLI version
[x] FPM Build FPM version
[x] FPM_IPV6 Enable ipv6 patch for FPM
[x] IPV6 Enable ipv6 support
[x] LINKTHR Link thread lib (for threaded extensions)
}}}

== Konfiguracja php.ini ==
{{{#!highlight ini numbers=off
engine = On
short_open_tag = Off
precision = 14
output_buffering = 4096
zlib.output_compression = Off
implicit_flush = Off
unserialize_callback_func =
serialize_precision = -1
disable_functions =
disable_classes =
zend.enable_gc = On
expose_php = On
max_execution_time = 30
max_input_time = 60
memory_limit = 128M
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
display_errors = Off
display_startup_errors = Off
log_errors = On
log_errors_max_len = 1024
ignore_repeated_errors = Off
ignore_repeated_source = Off
report_memleaks = On
track_errors = Off
html_errors = On
variables_order = "GPCS"
request_order = "GP"
register_argc_argv = Off
auto_globals_jit = On

post_max_size = 1048M
auto_prepend_file =
auto_append_file =
default_mimetype = "text/html"
default_charset = "UTF-8"
doc_root =
user_dir =
enable_dl = Off

file_uploads = On
upload_tmp_dir = /var/tmp/www
upload_max_filesize = 1035M
max_file_uploads = 20

allow_url_fopen = On
allow_url_include = Off
default_socket_timeout = 60

[CLI Server]
cli_server.color = On

[Date]
date.timezone = Europe/Warsaw

[filter]

[iconv]

[intl]

[sqlite3]

[Pcre]

[Pdo]

[Pdo_mysql]
pdo_mysql.cache_size = 2000
pdo_mysql.default_socket=

[Phar]

[mail function]
SMTP = localhost
smtp_port = 25
mail.add_x_header = On

[SQL]
sql.safe_mode = Off

[ODBC]
odbc.allow_persistent = On
odbc.check_persistent = On
odbc.max_persistent = -1
odbc.max_links = -1
odbc.defaultlrl = 4096
odbc.defaultbinmode = 1

[Interbase]
ibase.allow_persistent = 1
ibase.max_persistent = -1
ibase.max_links = -1
ibase.timestampformat = "%Y-%m-%d %H:%M:%S"
ibase.dateformat = "%Y-%m-%d"
ibase.timeformat = "%H:%M:%S"

[MySQLi]
mysqli.max_persistent = -1
mysqli.allow_persistent = On
mysqli.max_links = -1
mysqli.cache_size = 2000
mysqli.default_port = 3306
mysqli.default_socket =
mysqli.default_host =
mysqli.default_user =
mysqli.default_pw =
mysqli.reconnect = Off

[mysqlnd]
mysqlnd.collect_statistics = On
mysqlnd.collect_memory_statistics = Off

[OCI8]

[PostgreSQL]
pgsql.allow_persistent = On
pgsql.auto_reset_persistent = Off
pgsql.max_persistent = -1
pgsql.max_links = -1
pgsql.ignore_notice = 0
pgsql.log_notice = 0

[bcmath]
bcmath.scale = 0

[browscap]

[Session]
session.save_handler = files
session.use_strict_mode = 0
session.use_cookies = 1
session.use_only_cookies = 1
session.name = PHPSESSID
session.auto_start = 0
session.cookie_lifetime = 0
session.cookie_path = /
session.cookie_domain =
session.cookie_httponly =
session.serialize_handler = php
session.gc_probability = 1
session.gc_divisor = 1000
session.gc_maxlifetime = 1440
session.referer_check =
session.cache_limiter = nocache
session.cache_expire = 180
session.use_trans_sid = 0
session.sid_length = 26
session.trans_sid_tags = "a=href,area=href,frame=src,form="
session.sid_bits_per_character = 5
session.save_path = "/var/tmp/www"

[Assertion]
zend.assertions = -1

[COM]

[mbstring]

[gd]

[exif]

[Tidy]
tidy.clean_output = Off

[soap]
soap.wsdl_cache_enabled=1
soap.wsdl_cache_dir="/tmp"
soap.wsdl_cache_ttl=86400
soap.wsdl_cache_limit = 5

[sysvshm]

[ldap]
ldap.max_links = -1

[mcrypt]

[dba]

[opcache]

[curl]

[openssl]
openssl.capath = /etc/ssl

; Local Variables:
; tab-width: 4
; End:
}}}

== Konfiguracja php-fpm.conf ==
{{{#!highlight ini numbers=off
[global]
pid = run/php-fpm.pid
syslog.facility = daemon
syslog.ident = php-fpm
log_level = notice
emergency_restart_threshold = 0
process.max = 128
daemonize = yes
include=/usr/local/etc/php-fpm.d/*.conf
}}}

=== Konfiguracja etc/php-fpm.d/www.conf ===
{{{#!highlight ini numbers=off
[www]
user = www
group = www
listen = 127.0.0.1:9000
listen.backlog = -1
listen.allowed_clients = 127.0.0.1
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
pm.process_idle_timeout = 10s;
pm.max_requests = 500
security.limit_extensions = .php .php3 .php4 .php5 .php7
env[HOSTNAME] = $HOSTNAME
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /var/tmp/www
env[TMPDIR] = /var/tmp/www
env[TEMP] = /var/tmp/www
}}}

== Uruchomienie php-fpm ==
W skryptach startowych (`/etc/rc.conf` lub `/etc/rc.conf.d/php_fpm`) należy ustawić:
{{{#!highlight bash numbers=off
php_fpm_enable="YES"
}}}

A następnie uruchomić demon:
{{{#!highlight bash numbers=off
service php-fpm start
}}}
Została opisana w [[KonfiguracjaPhp|oddzielnej dokumentacji]].
Linia 323: Linia 75:
}}}

== Zwiększenie parametrów związanych z server_name ==
W przypadku konfiguracji wykorzystującej bardzo dużo wartości ''server_name'' należy ustawić parametry w sekcji ''http'':
{{{#!highlight nginx numbers=off
http {
    # [...]

    server_names_hash_max_size 1024;
    server_names_hash_bucket_size 512;

    # [...]
Linia 404: Linia 168:
    # dla paneli, kt/ore maj/a by/c pomini/ete przez wyszukiwarki
    add_header X-Robots-Tag none;
Linia 414: Linia 181:
    root /var/www/htdocs/virtuls/crm.limesmp.pl/web;
    index app.php;
Linia 415: Linia 185:
        root /var/www/htdocs/virtuls/www.mojadomena.pl/data;
        index index.html index.htm;
        try_files $uri $uri/ /app.php$is_args$args;
Linia 432: Linia 201:
    }

    # 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 [[UniMaster|repozytorium skryptów]]:

=== Obsługa plików .ht* ===
{{{#!highlight nginx numbers=off
    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    location ~ /\.ht {
        deny all;
    }
}}}

=== Obsługa PHP-FPM ===
 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'':
{{{#!highlight nginx numbers=off
    # 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;
Linia 443: Linia 262:

    # 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 warto umieścić w [[UniMaster|repozytorium skryptów]]:

=== Obsługa plików .ht* ===
{{{#!highlight nginx numbers=off
    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    location ~ /\.ht {
        deny all;
    }
}}}

=== Obsługa PHP-FPM ===
{{{#!highlight nginx numbers=off
    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
}}}
==== Właczenie short_open_tag w konkretnym serwerze (wirtualce) ====
W celu włączenia obsługi ''short_open_tag'' w konkretnym serwerze wirtualnym należy w dodać następującą konfigurację
{{{#!highlight nginx numbers=off
Linia 474: Linia 267:
        root html;
        fastcgi_pass 127.0.0.5:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
        include fastcgi_params;
    }
}}}
        fastcgi_pass unix:/var/run/php-fpm-www.socket;
        fastcgi_param PHP_ADMIN_VALUE short_open_tag=On;
        # [...]
    }
}}}

==== Inne ustawienia dla php w lokalizacji ====
Analogicznie do ustawienia ''short_open_tag'' można ustawić inne zmienne. Jak podano poniżej<<FootNote(Do sprawdznia, ponieważ dla przykładowej witryny powodowało to błędne działanie całej aplikacji webowej.)>>:
{{{#!highlight nginx numbers=off
    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php-fpm-www.socket;
        fastcgi_param PHP_ADMIN_VALUE open_basedir=/var/www/htdocs/virtuals/www.gdbd.pl/nowa-strona:/var/tmp:/usr/local/share/pear:/usr/local/share/phpmailer:/usr/local/share/adodb:/usr/local/share/smarty:/usr/local/share/fpdf:/usr/local/share/jpgraph;
        fastcgi_param PHP_ADMIN_VALUE sys_temp_dir=/var/www/htdocs/virtuals/www.gdbd.pl/nowa-strona/tmp;
        fastcgi_param PHP_ADMIN_VALUE upload_tmp_dir=/var/www/htdocs/virtuals/www.gdbd.pl/nowa-strona/tmp;
        fastcgi_param PHP_ADMIN_VALUE session.save_path=/var/www/htdocs/virtuals/www.gdbd.pl/nowa-strona/tmp;
        # [...]
    }
}}}

=== Obsługa CGI ===
Obsługa skryptów CGI jest bardzo prosta. Należy zainstalować oraz uruchomić [[FcgiWrap|fcgiwrap]]. W konfiguracji `nginx` należy wykonać konfigurację:
{{{#!highlight nginx numbers=off
        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 [[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 489: Linia 310:
=== 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 490: Linia 326:
(!) TBA 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 [[FreshPorts:net-mgmt/nagios3|net-mgmt/nagios3]]):
{{{#!highlight nginx numbers=off
    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 [[FreshPorts:net-mgmt/nagios3|net-mgmt/nagios3]] jest dość prosta. Sprowadza się do konfiguracji odpowiedniego ''location'' wraz z obsługą plików ''php'' oraz ''cgi'':
{{{#!highlight nginx numbers=off
    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 [[WikiPedia:Web_Proxy_Auto-Discovery_Protocol|Web Proxy Auto Discovery]] (WPAD). Konfiguracja jest bardzo krótka, a jednocześnie bardzo elastyczna dla klienta końcowego:
{{{#!highlight nginx numbers=off
# 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 [[DnsBlackHoling|oddzielnym dokumencie]].

== Konfiguracja dla mailman ==
Całość została opisana w [[MailmanPostfix|oddzielnej dokumentacji]].

== 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 497: Linia 463:
 * [[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"]]
Linia 499: Linia 468:
{i} A jak coś nie jest jasne, to napisz do administratora. {i} ` `<<GetVal(SlownikNewBsd,adm-podpis)>>


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;
}

Zwiększenie parametrów związanych z server_name

W przypadku konfiguracji wykorzystującej bardzo dużo wartości server_name należy ustawić parametry w sekcji http:

http {
    # [...]

    server_names_hash_max_size 1024;
    server_names_hash_bucket_size  512;

    # [...]

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

  1. Konieczne jest uruchomienie php-fpmd analogicznie do fcgiwrapd.

  2. 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;
    }

Właczenie short_open_tag w konkretnym serwerze (wirtualce)

W celu włączenia obsługi short_open_tag w konkretnym serwerze wirtualnym należy w dodać następującą konfigurację

    location ~ \.php$ {
        fastcgi_pass   unix:/var/run/php-fpm-www.socket;
        fastcgi_param  PHP_ADMIN_VALUE short_open_tag=On;
        # [...]
    }

Inne ustawienia dla php w lokalizacji

Analogicznie do ustawienia short_open_tag można ustawić inne zmienne. Jak podano poniżej2:

    location ~ \.php$ {
        fastcgi_pass   unix:/var/run/php-fpm-www.socket;
        fastcgi_param  PHP_ADMIN_VALUE open_basedir=/var/www/htdocs/virtuals/www.gdbd.pl/nowa-strona:/var/tmp:/usr/local/share/pear:/usr/local/share/phpmailer:/usr/local/share/adodb:/usr/local/share/smarty:/usr/local/share/fpdf:/usr/local/share/jpgraph;
        fastcgi_param  PHP_ADMIN_VALUE sys_temp_dir=/var/www/htdocs/virtuals/www.gdbd.pl/nowa-strona/tmp;
        fastcgi_param  PHP_ADMIN_VALUE upload_tmp_dir=/var/www/htdocs/virtuals/www.gdbd.pl/nowa-strona/tmp;
        fastcgi_param  PHP_ADMIN_VALUE session.save_path=/var/www/htdocs/virtuals/www.gdbd.pl/nowa-strona/tmp;
        # [...]
    }

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 mailman

Całość została opisana w oddzielnej dokumentacji.

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


{i}  (c) 2004 - 2026 BSD Serwis Krzysztof Stryjek. W przypadku błędów, poprawek proszę kontaktować się z administratorem wiki.

  1. 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)

  2. Do sprawdznia, ponieważ dla przykładowej witryny powodowało to błędne działanie całej aplikacji webowej. (2)

NginxWebServer (ostatnio edytowane 2020-05-03 20:29:13 przez wtps0n)