tmp
Wednesday, November 21, 2018
nginx memo
### package 基本は `nginx` 、lua を使いたい場合は `nginx-extras` * http://blog.it.churaumi.tv/nginx-light-full-extra-configure-compare ### config file path 設定ファイルを置く場所について サイト設定 `server` は `conf.d` に入れてもいいけど 区別のために `sites-available` に置いて `sites-enabled` に symlink 貼った方が良さげ lua ファイルは特に決まってないっぽいので `/etc/nginx/lua/` とかで あとは基本的に↓ * https://gakumon.tech/nginx/nginx_conf_directory.html ### content cache #### multi server 1台でキャッシュを扱う場合は特に何も考えなくていい redis, memcached 等のストレージを利用するケースだとモジュールが用意されているがキャッシュの設定はアプリケーションで行わないといけない様なのでちょっと微妙 ``` A response should be put in memcached in advance by means external to nginx. ``` * http://nginx.org/en/docs/http/ngx_http_memcached_module.html ``` The backend should set the data in redis. The redis key is /uri?args. ``` * https://www.nginx.com/resources/wiki/modules/redis/ * https://www.nginx.com/resources/wiki/modules/redis2/ ローカルキャッシュを利用する場合は下記の様な構成にするとうまくいく (`sharded cache` or `shared cache`) * https://www.nginx.com/blog/shared-caches-nginx-plus-cache-clusters-part-1/ #### purge cache nginx plus(有償) だと proxy_cache_purge module が提供されている 無料版だと * [Cache Purge](https://github.com/FRiCKLE/ngx_cache_purge) * [Selective Cache Purge](https://github.com/wandenberg/nginx-selective-cache-purge-module) ここら辺が使えそう(ただしnginxをソースからビルドしないといけないっぽいのでメンテとか考えると面倒そう) または lua で自力でやる場合は * https://scene-si.org/2016/11/02/purging-cached-items-from-nginx-with-lua/ * https://scene-si.org/2017/01/08/improving-nginx-lua-cache-purge/ ただし `proxy_cache_key` を指定しても key が揺らぐ(Vary, set-cookie とかで)みたいなのでそこら辺気にしないと確実に消せない デバイス別にキャッシュした場合も考慮する必要あり ``` proxy_ignore_headers Cache-Control Expires Set-Cookie Vary; proxy_hide_header Set-Cookie; ``` example * https://gist.github.com/fiahfy/a9d5ccbbe716286fe1b1ec71a65f1489 ### proxy_set_header location でheaderを追加したい時とかにそのまま追加だとうまくいかないのでいちいち全て再設定する必要がある `bad` ``` server { : proxy_set_header Host $host; : location / { proxy_set_header X-Foo 'foo'; } ``` `good` ``` server { : proxy_set_header Host $host; : location / { proxy_set_header Host $host; proxy_set_header X-Foo 'foo'; } ``` ### template #### log ``` log_format ltsv 'host:$http_host\t' 'port:$server_port\t' 'time:$time_iso8601\t' 'remote_addr:$remote_addr\t' 'request_method:$request_method\t' 'request_length:$request_length\t' 'request_uri:$request_uri\t' 'https:$https\t' 'uri:$uri\t' 'query_string:$query_string\t' 'status:$status\t' 'bytes_sent:$bytes_sent\t' 'body_bytes_sent:$body_bytes_sent\t' 'referer:$http_referer\t' 'useragent:$http_user_agent\t' 'forwardedfor:$http_x_forwarded_for\t' 'request_time:$request_time\t' 'upstream_response_time:$upstream_response_time'; access_log /var/log/nginx/access.log ltsv; error_log /var/log/nginx/error.log; ``` #### proxy cache ``` proxy_cache_path /var/cache/nginx/app levels=1:2 keys_zone=app:8m inactive=10m max_size=128m; proxy_temp_path /var/cache/nginx/tmp; ``` #### map ``` map $http_user_agent $mobile { default 0; ~iPhone 1; ~Android 1; ~BlackBerry 1; } ``` #### ssl ``` ssl_protocols TLSv1.2; ssl_prefer_server_ciphers on; ssl_certificate /etc/ssl/certs/site.pem; ssl_certificate_key /etc/ssl/private/site.key; ```
No comments:
Post a Comment
Newer Post
Older Post
Home
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment