[轉]常見的nginx的配置選項

對於想學  Nginx 的新人,這是一個很是不錯的簡明指導。javascript

Google 上有豐富的 Nginx 的教程和樣本配置文件,但不少時候時候,配置這些是須要一些技巧。css

Include 文件html

不要在您的主 nginx.conf 文件中配置全部的東西,你須要分紅幾個較小的文件。您的同事會很感激你的。好比個人結構,我定義個人 upstream 的 pool 的爲一個文件,和一個文件定義 location 處理服務器上其它的應用。java

例子:node

upstream cluster1 {
 fair;
 server app01:7060;
 server app01:7061;
 server app02:7060;
 server app02:7061;
 }
upstream cluster2 {
 fair;
 server app01:7071;
 server app01:7072;
 server app02:7071;
 server app02:7072;
 }

servers.conf

location / {
 root /var/www;
 include cache-control.conf;
 index index.html index.htm;
 }
location /services/service1 {
 proxy_pass_header Server;
 proxy_set_header Host $http_host;
 proxy_redirect off;
 proxy_set_header X-Real-IP $remote_addr;
 proxy_set_header X-Scheme $scheme;
 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
add_header Pragma "no-cache";
proxy_pass http://cluster1/;
 }
location /services/service2 {
 proxy_pass_header Server;
 proxy_set_header Host $http_host;
 proxy_redirect off;
 proxy_set_header X-Real-IP $remote_addr;
 proxy_set_header X-Scheme $scheme;
 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
add_header Pragma "no-cache";
proxy_pass http://cluster2/service2;
 }

servers.confnginx

server {
 listen 80;
 include locations.conf;
 }

如今,你的 nginx.conf 看起來很是的乾淨和簡單(仍然能夠分開更多,來更包括文件,好比分離gzip的配置選項)shell

nginx.conf服務器

worker_processes 4;
 worker_rlimit_nofile 10240;
events {
 worker_connections 10240;
 use epoll;
 }
http {
 include upstreams.conf;
include mime.types;
 default_type application/octet-stream;
log_format custom '$remote_addr - $remote_user [$time_local] '
 '"$request" $status $bytes_sent '
 '"$http_referer" "$http_user_agent" "$http_x_forwarded_for" $request_time';
access_log /usr/local/nginx/logs/access.log custom;
proxy_buffering off;
 sendfile on;
 tcp_nopush on;
 tcp_nodelay on;
gzip on;
 gzip_min_length 10240;
 gzip_proxied expired no-cache no-store private auth;
 gzip_types text/plain text/css text/xml text/javascript application/x-javascript application/xml application/xml+rss image/svg+xml application/x-font-ttf application/vnd.ms-fontobject;
 gzip_disable "MSIE [1-6]\.";
# proxy cache config
 proxy_cache_path /mnt/nginx_cache levels=1:2
 keys_zone=one:10m
 inactive=7d max_size=10g;
 proxy_temp_path /var/tmp/nginx_temp;
proxy_next_upstream error;
include servers.conf;
 }

這 nginx.conf 文件是使用了一些不太常見的配置選項,它值得指出其中一些重要的。app

多個 worker 的配置(進程)tcp

若是你的 Nginx 是多個 CPU 和多核,須要配置成多核的數量比較好:

worker_processes 4;

增長打開的文件句柄

若是 Nginx 服務很大的流量,增長最大能夠打開的文件句柄仍是頗有用的,由於默認只有 1024 個.可使用 ‘ulimit -n’ 看到當前系統中的設置.

worker_rlimit_nofile 10240;

定製的日誌

能夠看看 log_format 和 access_log 二個選項的設置. 一般咱們有幾個參數最常使用,象 「$http_x_forwarded_for」 能夠見到 load balancer 的設備以前的 IP, 還有 「$request_time」 能夠見到 Nginx 來處理這個主動所花的時間.

壓縮

壓縮對於文本很是很是的有用.

gzip on;
 gzip_min_length 10240;
 gzip_proxied expired no-cache no-store private auth;
 gzip_types text/plain text/css text/xml text/javascript application/x-javascript application/xml application/xml+rss image/svg+xml application/x-font-ttf application/vnd.ms-fontobject;
 gzip_disable "MSIE [1-6]\.";

代理的選項

這些選項能夠在每一個 location 中設置.

proxy_pass_header Server;
 proxy_set_header Host $http_host;
 proxy_redirect off;
 proxy_set_header X-Real-IP $remote_addr;
 proxy_set_header X-Scheme $scheme;
 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
 add_header Pragma "no-cache";

這個中加了一個定製的參數,就是 ‘no-cache’,這樣就不會使用 cache 的內容了.

代理的 Cache

使用 Nginx 能夠給一些文件來 cache 到本地來當 Cache 的服務器,須要設置 proxy_cache_path 和 proxy_temp_path 在你的 HTTP 的 directive 中.在 location 中配置.若是有你想 cache 的內容的話.

proxy_cache_path /mnt/nginx_cache levels=1:2
 keys_zone=one:10m
 inactive=7d max_size=10g;
 proxy_temp_path /var/tmp/nginx_temp;

這可能還想增長一些其它的參數

proxy_cache one;
 proxy_cache_key mylocation.$request_uri;
 proxy_cache_valid 200 302 304 10m;
 proxy_cache_valid 301 1h;
 proxy_cache_valid any 1m;
 proxy_cache_use_stale error timeout invalid_header http_500 http_502 http_503 http_504 http_404;

HTTP caching options

有時你想使用其它的東西來作 Cache ,你可能須要指定怎麼樣 cache. 你能夠給 cache 的信息的文件 include 到你的 root 的 location 中:

location / {
 root /var/www;
 include cache-control.conf;
index index.html index.htm;
 }

你能夠指定不一樣的頭到於不一樣的文件

# default cache 1 day
 expires +1d;
if ($request_uri ~* "^/services/.*$") {
 expires +0d;
 add_header Pragma "no-cache";
 }
if ($request_uri ~* "^/(index.html)?$") {
 expires +1h;
 }

SSL

若是你要配置 ssl 的鏈接的話

server {
 server_name www.example.com;
 listen 443;
 ssl on;
 ssl_certificate /usr/local/nginx/ssl/cert.pem;
 ssl_certificate_key /usr/local/nginx/ssl/cert.key;
include locations.conf;
 }
相關文章
相關標籤/搜索