Irohabook
0
737

NGINXの設定ファイル例(Lets Encryptとリバースプロキシを使う場合)

NGINX の設定ファイルはコンテキストで分ける。

/etc/nginx/nginx.conf
/etc/nginx/conf.d/default.conf

http コンテキストと server コンテキストを分けて、server コンテキストを conf.d の中に入れると見やすい構造になる。

/etc/nginx/nginx.conf

events と http の設定。

user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
    multi_accept        on;
}

http {
    server_tokens  off;
    sendfile       on;
    tcp_nopush     on;
    keepalive_timeout          10;
    client_header_timeout      10;
    client_body_timeout        10;
    send_timeout               10;
    reset_timedout_connection  on;

    limit_conn addr  100;
    limit_conn_zone $binary_remote_addr zone=addr:10m;
    limit_req_zone $binary_remote_addr zone=one:10m rate=50r/s;

    charset  UTF-8;

    include       /etc/nginx/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/access.log  main;

    gzip on;
    gzip_proxied any;
    gzip_comp_level 6;
    gzip_types text/plain
               text/css
               text/javascript
               application/javascript
               application/x-javascript;

    include /etc/nginx/conf.d/*.conf;
}

/etc/nginx/conf.d/default.conf

server の設定。

server {
    server_name  abc.test.com;

    proxy_set_header    Host                $host;
    proxy_set_header    X-Real-IP           $remote_addr;
    proxy_set_header    X-Forwarded-Host    $host;
    proxy_set_header    X-Forwarded-Server  $host;
    proxy_set_header    X-Forwarded-For     $proxy_add_x_forwarded_for;

    location / {
        proxy_pass http://127.0.0.1:8080;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    listen 443 ssl;
    ssl_certificate /etc/letsencrypt/live/abc.test.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/abc.test.com/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
}

server {
    if ($host = abc.test.com) {
        return 301 https://$host$request_uri;
    }

    listen  80;
    server_name  abc.test.com;
    return  404;
}

limit_conn の注意点(重要)

DDoS などを考慮すると limit_conn の設定はほとんど避けられない。limit_conn を設定するときは、limit_conn と limit_conn_zone で用いるゾーンは同一にする。

limit_conn addr  100;
limit_conn_zone $binary_remote_addr zone=addr:10m;
limit_req_zone $binary_remote_addr zone=one:10m rate=50r/s;

addr が limit_conn と limit_conn_zone の両方にあらわれている。異なるゾーンを指定するとエラーになり

nginx: [emerg] zero size shared memory zone "addr"

といった警告が出る。

ポイント

client_header_timeout や limit_conn といった通信そのものの設定は http の設定であり、server の設定ではない。

次の記事

NGINX