search
New サムネイル Pythonで同じディレクトリにあるファイルを開く(path.dirname(__file__) New サムネイル PythonでSchema.orgのDate形式(ISO 8601)を扱う New サムネイル 分断するメディアとインターネットのユーザー:ライトノベル、キズナアイ、TikTokに思うこと

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 の設定ではない。

広告

広告

広告

コンピューター コンピューター
プログラミング プログラミング
数学 数学
英語 英語
国語 国語
理科 理科
社会 社会

Python入門

Python入門

化学入門

化学入門

漢字辞典

漢字辞典

整数辞典

漢字辞典

Lord Candy

Lord Candy