nginx 常用配置案例(三)
nginx作為一個http伺服器,在功能實現方面和效能方面都表現的非常優越,下面就寫一些nginx常用的配置例項:
1、虛擬主機配置:
下面在nginx中建立2個虛擬主機,需要說明的是,這裡僅僅列出了虛擬主機的配置部分。
server {
server_name image.zl.com 外網ip;
proxy_connect_timeout 600;
proxy_read_timeout 600;
proxy_send_timeout 600;
charset UTF-8;
index emptyImg.png;
root /home/zl/software/tomcat-7.0.54/imgfile;
#limit_conn crawler 20;
error_page 404 /emptyImg.png;
error_page 403 /emptyImg.png;
error_page 500 /emptyImg.png;
location ~ ^/xbnfile/
{
if ($http_origin ~* (test.xbniao.com||my.xbniao.com)) {
set $cors "true";
}
# Nginx doesn't support nested If statements. This is where things get slightly nasty.
# Determine the HTTP request method used
if ($request_method = 'OPTIONS') {
set $cors "${cors}options";
}
if ($request_method = 'GET') {
set $cors "${cors}get";
}
if ($request_method = 'POST') {
set $cors "${cors}post";
}
if ($cors = "true") {
# Catch all incase there's a request method we're not dealing with properly
add_header 'Access-Control-Allow-Origin' "$http_origin";
}
if ($cors = "trueget") {
add_header 'Access-Control-Allow-Origin' "$http_origin";
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
}
if ($cors = "trueoptions") {
add_header 'Access-Control-Allow-Origin' "$http_origin";
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
add_header 'Access-Control-Max-Age' 1728000;
add_header 'Content-Type' 'text/plain charset=UTF-8';
add_header 'Content-Length' 0;
return 204;
}
if ($cors = "truepost") {
add_header 'Access-Control-Allow-Origin' "$http_origin";
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
}
add_header 'Access-Control-Allow-Origin' "test.xbniao.com";
proxy_pass http://image.xbniao.com:8080;
}
location ~ ^/service/
{
proxy_pass http://image.zl.com:8080;
}
location ~* /500x500(.*)\.(gif|jpg|jpeg|png|bmp|swf)$
{
root /home/zl/software/tomcat-7.0.54/imgfile500x500;
expires 30d;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
error_page 404 = /emptyImg.png;
expires 30d;
}
location ~ .*\.(js|css)?$
{
expires 1h;
}
location ~ ^/(WEB-INF)/
{
deny all;
}
}
server
{
server_name test.zl.com my.zl.com;
#index index.html index.htm index.jsp index.jhtml;
index index.html index.jhtml;
root /home/xbniao/software/tomcat-7.0.54/webapps/zl-front;
#limit_conn crawler 20;
error_page 404 /error404.jspx;
error_page 500 /error500.jspx;
location ~ .*.(jsp|do|action|jhtml|jspx|svl|htm)$
{
index index.jsp;
proxy_pass
proxy_connect_timeout 1800;
proxy_read_timeout 1800;
proxy_send_timeout 1800;
}
location ^~/XBNService/ {
proxy_pass
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
error_page 404 = /default.jpg;
expires 30d;
}
location ~ .*\.(js|css)?$
{
expires 1h;
}
location ~ ^/(WEB-INF)/
{
deny all;
}
}
負載均衡配置例項:
下面透過nginx的反向代理功能配置一個nginx負載均衡伺服器,後端有3個服務節點,用於提供tomcat服務,透過nginx排程實現3個節點的負載均衡:
http
{
upstream myserver {
server 192.168.10.10:8080 weight=3 max_fail=3 fail_timeout=20s;
server 192.168.10.11:8080 weight=1 max_fail=3 fail_timeout=20s;
server 192.168.10.12:8080 weight=2 max_fail=3 fail_timeout=20s;
}
server
{ listen 80;
server_name 192.168.10.9;
index index.htm index.html;
root /home/zl/webapps;
location ~ .*.(jsp|do|action|jhtml|jspx|svl|htm)$
{
index index.jsp;
proxy_pass
proxy_next_upstream http_500 http_502 http_503 error timeout invalid_header;
include /etc/nginx/conf.d/proxy.conf;
}
}
}
在上面這個例子中,先定義一個負載均衡組myserver,然後在location部分透過"proxy_pass "來實現負載均衡排程功能;其中proxy_pass指令用來指定後端代理伺服器的地址和埠;地址可以是主機名或者ip地址;也可以是透過upstream指令設定的負載均衡組;
proxy_next_upstream 用來定義故障轉移策略;當後端服務節點返回500,502,503,504和執行超時等錯誤時,自動將請求轉發到nginx 負載均衡組的另一臺伺服器;實現故障轉移;
最後透過include指令包含進來一個proxy.conf檔案:
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
nginx的代理功能是透過http proxy模組來實現的。預設在安裝nginx時已經安裝了http proxy模組,因此可直接使用http proxy模組。下面詳細解釋proxy.conf檔案中每個選項代表的意義:
proxy_set_header:設定由後端的伺服器獲取使用者的主機名或真是ip地址,以及代理者的真實ip地址;
client_body_buffer_size:用於指定客戶端請求主體緩衝區的大小,可以理解為先儲存到本地再傳給使用者;
proxy_connect_timeout:表示與後端伺服器連線的超時時間,即發起握手等候的響應時間;
proxy_send_timeout:表示後端伺服器的資料回傳時間,即在規定時間之內後端伺服器必須傳完的所有資料,否則,nginx將斷開這個連線;
proxy_read_timeout:設定nginx從代理的後端伺服器獲取資訊的時間,表示連線建立成功後,nginx等待後端伺服器的響應時間,其實是nginx已經進入後端的排隊之中等候處理的時間;
proxy_buffer_timeout:設定緩衝區的大小,預設緩衝區大小等於proxy_buffers設定的大小;
proxy_buffers:設定緩衝區的數量和大小。nginx從代理的後端伺服器獲取的響應資訊;
proxy_busy_buffer_size:用於設定系統很忙時,可以使用的proxy_buffers的大小;官方推薦的大小為proxy_buffers*2.
proxy_temp_file_write_size:指定proxy快取臨時檔案的大小。
nginx防倒鏈配置例項
nginx的防倒鏈功能也很強大,在預設情況下,只需要進行簡單的配置,即可以實現防倒鏈處理。請看下面的例項:
location ~* \.(jpg|gif|png|swf|flv|wmv|asf|mp3|mmf|zip|rar)$ {
valid_referers none blocked *.zl.com zl.com;
if ($invalid_referer) { #如果地址不是上面指定的地址就跳轉到透過rewrite指定的地址;
rewrite ^/ http:///img/error.gif;
# return 403;
}
}
location /images {
root /home/zl/html;
valid_referers none blocked *.zl.com zl.com;
if ($invalid_referer) {
return 403;
}
}
在這段防倒鏈設定中,分別針對不同檔案型別和不同的目錄進行了設定,使用者可以根據自己的需求進行類似的設定;
1、虛擬主機配置:
下面在nginx中建立2個虛擬主機,需要說明的是,這裡僅僅列出了虛擬主機的配置部分。
server {
server_name image.zl.com 外網ip;
proxy_connect_timeout 600;
proxy_read_timeout 600;
proxy_send_timeout 600;
charset UTF-8;
index emptyImg.png;
root /home/zl/software/tomcat-7.0.54/imgfile;
#limit_conn crawler 20;
error_page 404 /emptyImg.png;
error_page 403 /emptyImg.png;
error_page 500 /emptyImg.png;
location ~ ^/xbnfile/
{
if ($http_origin ~* (test.xbniao.com||my.xbniao.com)) {
set $cors "true";
}
# Nginx doesn't support nested If statements. This is where things get slightly nasty.
# Determine the HTTP request method used
if ($request_method = 'OPTIONS') {
set $cors "${cors}options";
}
if ($request_method = 'GET') {
set $cors "${cors}get";
}
if ($request_method = 'POST') {
set $cors "${cors}post";
}
if ($cors = "true") {
# Catch all incase there's a request method we're not dealing with properly
add_header 'Access-Control-Allow-Origin' "$http_origin";
}
if ($cors = "trueget") {
add_header 'Access-Control-Allow-Origin' "$http_origin";
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
}
if ($cors = "trueoptions") {
add_header 'Access-Control-Allow-Origin' "$http_origin";
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
add_header 'Access-Control-Max-Age' 1728000;
add_header 'Content-Type' 'text/plain charset=UTF-8';
add_header 'Content-Length' 0;
return 204;
}
if ($cors = "truepost") {
add_header 'Access-Control-Allow-Origin' "$http_origin";
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
}
add_header 'Access-Control-Allow-Origin' "test.xbniao.com";
proxy_pass http://image.xbniao.com:8080;
}
location ~ ^/service/
{
proxy_pass http://image.zl.com:8080;
}
location ~* /500x500(.*)\.(gif|jpg|jpeg|png|bmp|swf)$
{
root /home/zl/software/tomcat-7.0.54/imgfile500x500;
expires 30d;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
error_page 404 = /emptyImg.png;
expires 30d;
}
location ~ .*\.(js|css)?$
{
expires 1h;
}
location ~ ^/(WEB-INF)/
{
deny all;
}
}
server
{
server_name test.zl.com my.zl.com;
#index index.html index.htm index.jsp index.jhtml;
index index.html index.jhtml;
root /home/xbniao/software/tomcat-7.0.54/webapps/zl-front;
#limit_conn crawler 20;
error_page 404 /error404.jspx;
error_page 500 /error500.jspx;
location ~ .*.(jsp|do|action|jhtml|jspx|svl|htm)$
{
index index.jsp;
proxy_pass
proxy_connect_timeout 1800;
proxy_read_timeout 1800;
proxy_send_timeout 1800;
}
location ^~/XBNService/ {
proxy_pass
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
error_page 404 = /default.jpg;
expires 30d;
}
location ~ .*\.(js|css)?$
{
expires 1h;
}
location ~ ^/(WEB-INF)/
{
deny all;
}
}
負載均衡配置例項:
下面透過nginx的反向代理功能配置一個nginx負載均衡伺服器,後端有3個服務節點,用於提供tomcat服務,透過nginx排程實現3個節點的負載均衡:
http
{
upstream myserver {
server 192.168.10.10:8080 weight=3 max_fail=3 fail_timeout=20s;
server 192.168.10.11:8080 weight=1 max_fail=3 fail_timeout=20s;
server 192.168.10.12:8080 weight=2 max_fail=3 fail_timeout=20s;
}
server
{ listen 80;
server_name 192.168.10.9;
index index.htm index.html;
root /home/zl/webapps;
location ~ .*.(jsp|do|action|jhtml|jspx|svl|htm)$
{
index index.jsp;
proxy_pass
proxy_next_upstream http_500 http_502 http_503 error timeout invalid_header;
include /etc/nginx/conf.d/proxy.conf;
}
}
}
在上面這個例子中,先定義一個負載均衡組myserver,然後在location部分透過"proxy_pass "來實現負載均衡排程功能;其中proxy_pass指令用來指定後端代理伺服器的地址和埠;地址可以是主機名或者ip地址;也可以是透過upstream指令設定的負載均衡組;
proxy_next_upstream 用來定義故障轉移策略;當後端服務節點返回500,502,503,504和執行超時等錯誤時,自動將請求轉發到nginx 負載均衡組的另一臺伺服器;實現故障轉移;
最後透過include指令包含進來一個proxy.conf檔案:
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
nginx的代理功能是透過http proxy模組來實現的。預設在安裝nginx時已經安裝了http proxy模組,因此可直接使用http proxy模組。下面詳細解釋proxy.conf檔案中每個選項代表的意義:
proxy_set_header:設定由後端的伺服器獲取使用者的主機名或真是ip地址,以及代理者的真實ip地址;
client_body_buffer_size:用於指定客戶端請求主體緩衝區的大小,可以理解為先儲存到本地再傳給使用者;
proxy_connect_timeout:表示與後端伺服器連線的超時時間,即發起握手等候的響應時間;
proxy_send_timeout:表示後端伺服器的資料回傳時間,即在規定時間之內後端伺服器必須傳完的所有資料,否則,nginx將斷開這個連線;
proxy_read_timeout:設定nginx從代理的後端伺服器獲取資訊的時間,表示連線建立成功後,nginx等待後端伺服器的響應時間,其實是nginx已經進入後端的排隊之中等候處理的時間;
proxy_buffer_timeout:設定緩衝區的大小,預設緩衝區大小等於proxy_buffers設定的大小;
proxy_buffers:設定緩衝區的數量和大小。nginx從代理的後端伺服器獲取的響應資訊;
proxy_busy_buffer_size:用於設定系統很忙時,可以使用的proxy_buffers的大小;官方推薦的大小為proxy_buffers*2.
proxy_temp_file_write_size:指定proxy快取臨時檔案的大小。
nginx防倒鏈配置例項
nginx的防倒鏈功能也很強大,在預設情況下,只需要進行簡單的配置,即可以實現防倒鏈處理。請看下面的例項:
location ~* \.(jpg|gif|png|swf|flv|wmv|asf|mp3|mmf|zip|rar)$ {
valid_referers none blocked *.zl.com zl.com;
if ($invalid_referer) { #如果地址不是上面指定的地址就跳轉到透過rewrite指定的地址;
rewrite ^/ http:///img/error.gif;
# return 403;
}
}
location /images {
root /home/zl/html;
valid_referers none blocked *.zl.com zl.com;
if ($invalid_referer) {
return 403;
}
}
在這段防倒鏈設定中,分別針對不同檔案型別和不同的目錄進行了設定,使用者可以根據自己的需求進行類似的設定;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30129545/viewspace-1453888/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- nginx常用配置Nginx
- nginx常用配置教程。Nginx
- nginx host常用配置Nginx
- Nginx之(三)Nginx配置Nginx
- nginx 常用配置記錄Nginx
- Nginx的幾個常用配置和技巧Nginx
- Nginx常用配置引數的含義Nginx
- 大神教你Nginx常用基礎配置方案Nginx
- Nginx簡介和常用的一些配置Nginx
- 整理的一些常用到的 Nginx 配置Nginx
- Redis服務之常用配置(三)Redis
- Nginx實戰(三) 日誌配置與切割Nginx
- 案例:配置apache和nginx的SSL加密傳輸協議ApacheNginx加密協議
- Vim常用操作-Nginx配置檔案批量加註釋。Nginx
- Nginx常用的配置 多臺服務 跨域 HTTPSNginx跨域HTTP
- Nginx虛擬主機常用配置(學習筆記四)Nginx筆記
- awk常用案例
- 配置nginxNginx
- Nginx 配置Nginx
- nginx配置Nginx
- 【實操案例】Linux磁碟管理常用的三個命令!Linux
- Linux下玩轉nginx系列(三)---nginx日誌配置檔案說明LinuxNginx
- nginx內建高可用配置與第三方高可用模組nginx_ustream_check_mudule配置Nginx
- Nginx 配置常用引數,看這一篇就夠了Nginx
- Nginx常用的模組Nginx
- 常用的 nginx 命令Nginx
- 高效能Web伺服器Nginx的配置與部署研究(4)Nginx常用命令Web伺服器Nginx
- Nginx 常用面試題-什麼是NginxNginx面試題
- Nginx學習系列三Nginx的啟動、停止、修改配置檔案後重啟Nginx
- nginx之 nginx限流配置Nginx
- Nginx篇--解讀nginx配置Nginx
- 全站HTTPS升級系列(三)nginx配置全站HTTPSHTTPNginx
- linux重新載入nginx配置的三種辦法LinuxNginx
- Docker配置nginxDockerNginx
- nginx代理配置Nginx
- Nginx Location 配置Nginx
- NGINX基本配置Nginx
- Nginx 配置域名Nginx