server虛擬主機模塊
server 模塊需要配置在 http 模塊中
http {
server {
#監聽端口 80
listen 80;
#監聽域名dh.com;
server_name dh.com www.dh.com;
access_log logs/sever.log combined;
location / {
# 站點根目錄,即網站程序存放目錄
# 相對路徑,相對nginx根目錄。也可寫成絕對路徑
root /data/dh;
# 默認跳轉到index.html頁面
index index.html;
#開啓後會以主目錄下的隨機文件作爲主頁
#random_index on;
}
}
}
常用配置
-
listen [PORT]
# 設定此虛擬主機爲默認的虛擬主機 ## 會優先匹配虛擬主機 listen 80 default_server;
-
server_name [name…]
虛擬主機的名稱。可以添加多個,空格分隔;還可以匹配正則表達式
匹配優先級:
-
精確匹配:
server_name daiadrian.github.io
-
左側*通配符:
server_name *.github.io
-
右側*通配符:
server_name daiadrian.github.*
-
正則表達式:
server_name ~^.*\.github\.io$
-
default_server
-
-
tcp_nodelay [on|off]
- off指延遲發送,即如果一個會話中有多個請求,會合並之後再發送
- on指不延遲發送,來一個請求就處理一個
一般爲了用戶體驗最好設置成on,如果爲了服務器的資源得到更好的使用可以設置爲off
-
server_tokens [on|off|build|string]
是否在響應報文的server首部顯示nginx版本
HTTP/1.1 304 Not Modified Server: nginx/1.15.7 Date: Thu, 09 May 2019 03:33:04 GMT Last-Modified: Tue, 09 Apr 2019 14:26:15 GMT 設置爲on,則在server會顯示nginx版本 推薦設置爲 off 或者修改源碼使其可用 string 選項 (string是商業版纔有)
-
error_page code [=[response]] uri
定義錯誤頁面,可以以指定的響應狀態碼進行響應
error_page 404 /404.html # =200 即如果是404的錯誤,響應的狀態碼返回給客戶端是200的狀態 ## 可以指定響應狀態碼,可以防止360等流氓瀏覽器將404的頁面強行轉到360自帶的404頁面去 error_page 404 =200 /404.html location = /404.html { alias /web/error; }
訪問日誌配置
通常web服務器放在反向代理的後面,這樣就不能獲取到客戶的IP地址了,通過 $remote_add
拿到的IP地址是反向代理服務器的iP地址
反向代理服務器在轉發請求的 http 頭信息中,可以增加 x_forwarded_for
信息,用以記錄原有客戶端的IP地址和原來客戶端的請求的服務器地址
#日誌格式設定
log_format combined '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" $http_x_forwarded_for';
#定義本虛擬主機的訪問日誌
access_log /usr/local/nginx/logs/host.access.log main;
access_log /usr/local/nginx/logs/host.access.404.log log404;
$remote_addr
與$http_x_forwarded_for
用以記錄客戶端的 ip 地址$remote_user
:用來記錄客戶端用戶名稱$time_local
: 用來記錄訪問時間與時區$request
: 用來記錄請求的url與http協議$status
: 用來記錄請求狀態;成功是200$body_bytes_sent
:記錄發送給客戶端文件主體內容大小$http_referer
:用來記錄從那個頁面鏈接訪問過來的$http_user_agent
:記錄客戶瀏覽器的相關信息
詳細配置
http {
#虛擬主機的配置
server {
#監聽端口
listen 80;
#域名可以有多個,用空格隔開
server_name www.dh.com dh.cn;
index index.html index.htm index.php;
root /data/dh;
#圖片緩存時間設置
location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$
{
#緩存時間
expires 10d;
}
#JS和CSS緩存時間設置
location ~ .*.(js|css)?$
{
expires 1h;
}
log_format combined '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" $http_x_forwarded_for';
#定義本虛擬主機的訪問日誌
access_log /usr/local/nginx/logs/host.access.log main;
access_log /usr/local/nginx/logs/host.access.404.log log404;
#對 "/" 啓用反向代理
location / {
proxy_pass http://127.0.0.1:88;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
#後端的Web服務器可以通過X-Forwarded-For獲取用戶真實IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#以下是一些反向代理的配置,可選。
proxy_set_header Host $host;
#允許客戶端請求的最大單文件字節數
client_max_body_size 10m;
#緩衝區代理緩衝用戶端請求的最大字節數,
#如果把它設置爲比較大的數值,例如256k,那麼,無論使用firefox還是IE瀏覽器,來提交任意小於256k的圖片,都很正常。如果註釋該指令,使用默認的client_body_buffer_size設置,也就是操作系統頁面大小的兩倍,8k或者16k,問題就出現了。
#無論使用firefox4.0還是IE8.0,提交一個比較大,200k左右的圖片,都返回500 Internal Server Error錯誤
client_body_buffer_size 128k;
#表示使nginx阻止HTTP應答代碼爲400或者更高的應答。
proxy_intercept_errors on;
#後端服務器連接的超時時間_發起握手等候響應超時時間
#nginx跟後端服務器連接超時時間(代理連接超時)
proxy_connect_timeout 90;
#後端服務器數據回傳時間(代理髮送超時)
#後端服務器數據回傳時間_就是在規定時間之內後端服務器必須傳完所有的數據
proxy_send_timeout 90;
#連接成功後,後端服務器響應時間(代理接收超時)
#連接成功後_等候後端服務器響應時間_其實已經進入後端的排隊之中等候處理(也可以說是後端服務器處理請求的時間)
proxy_read_timeout 90;
#設置代理服務器(nginx)保存用戶頭信息的緩衝區大小
#設置從被代理服務器讀取的第一部分應答的緩衝區大小,通常情況下這部分應答中包含一個小的應答頭,默認情況下這個值的大小爲指令proxy_buffers中指定的一個緩衝區的大小,不過可以將其設置爲更小
proxy_buffer_size 4k;
#proxy_buffers緩衝區,網頁平均在32k以下的設置
#設置用於讀取應答(來自被代理服務器)的緩衝區數目和大小,默認情況也爲分頁大小,根據操作系統的不同可能是4k或者8k
proxy_buffers 4 32k;
#高負荷下緩衝大小(proxy_buffers*2)
proxy_busy_buffers_size 64k;
#設置在寫入proxy_temp_path時數據的大小,預防一個工作進程在傳遞文件時阻塞太長
#設定緩存文件夾大小,大於這個值,將從upstream服務器傳
proxy_temp_file_write_size 64k;
}
#設定查看Nginx狀態的地址
location /NginxStatus {
#開啓查看Nginx狀態模塊
stub_status on;
access_log on;
auth_basic "NginxStatus";
auth_basic_user_file confpasswd;
#htpasswd文件的內容可以用apache提供的htpasswd工具來產生。
}
#本地動靜分離反向代理配置
#所有jsp的頁面均交由tomcat或resin處理
location ~ .(jsp|jspx|do)?$ {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:8080;
}
#所有靜態文件由nginx直接讀取不經過tomcat或resin
location ~ .*.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|
pdf|xls|mp3|wma)$
{
#緩存時間
expires 15d;
}
location ~ .*.(js|css)?$
{
expires 1h;
}
}
}