A. 如何可以在nginx反向代理的情況下過濾掉源站的cookie
重新編譯nginx添加realip模塊,只編譯,不安裝 修改後端nginx配置文件$_SERVER['HTTP_X_REAL_IP']; 重啟nginx服務
B. nginx怎麼設置虛擬機來記錄所有非法host header
nginx為了實現反向代理的需求而增加了一個ngx_http_proxy_mole模塊。其中proxy_set_header指令就是該模塊需要讀取的配置文件。在這里,所有設置的值的含義和http請求同中的含義完全相同,除了Host外還有X-Forward-For。
Host的含義是表明請求的主機名,因為nginx作為反向代理使用,而如果後端真是的伺服器設置有類似防盜鏈或者根據http請求頭中的host欄位來進行路由或判斷功能的話,如果反向代理層的nginx不重寫請求頭中的host欄位,將會導致請求失敗【默認反向代理伺服器會向後端真實伺服器發送請求,並且請求頭中的host欄位應為proxy_pass指令設置的伺服器】。
同理,X_Forward_For欄位表示該條http請求是有誰發起的?如果反向代理伺服器不重寫該請求頭的話,那麼後端真實伺服器在處理時會認為所有的請求都來在反向代理伺服器,如果後端有防攻擊策略的話,那麼機器就被封掉了。因此,在配置用作反向代理的nginx中一般會增加兩條配置,修改http的請求頭:
proxy_set_header Host $http_host;
proxy_set_header X-Forward-For $remote_addr;
這里的$http_host和$remote_addr都是nginx的導出變數,可以再配置文件中直接使用。如果Host請求頭部沒有出現在請求頭中,則$http_host值為空,但是$host值為主域名。因此,一般而言,會用$host代替$http_host變數,從而避免http請求中丟失Host頭部的情況下Host不被重寫的失誤。
C. Nginx 反代,怎麼修改 header
通過add_header指令可以為響應頭中添加指定的信息
如果需要向後端伺服器發送頭信息,可以使用proxy_set_header指令
D. nginx output-header-filter是什麼階段
在原生的nginx,他不可以動態載入模塊,所以當你安裝第三方模塊的時候需要覆蓋nginx文件.nginx第三方模塊安裝方法如下:
1
./configure --prefix=/你的安裝目錄 --add-mole=/第三方模塊目錄
以安裝pagespeed模塊實例
在未安裝nginx的情況下安裝nginx第三方模塊
1
2
3
4
5
6
7
8
# ./configure --prefix=/usr/local/nginx-1.4.1 \
--with-http_stub_status_mole \
--with-http_ssl_mole --with-http_realip_mole \
--with-http_image_filter_mole \
--add-mole=../ngx_pagespeed-master --add-mole=/第三方模塊目錄
# make
# make isntall
# /usr/local/nginx-1.4.1/sbin/nginx
在已安裝nginx情況下安裝nginx模塊
1
2
3
4
5
6
7
8
9
# ./configure --prefix=/usr/local/nginx-1.4.1 \
--with-http_stub_status_mole \
--with-http_ssl_mole --with-http_realip_mole \
--with-http_image_filter_mole \
--add-mole=../ngx_pagespeed-master
# make
# /usr/local/nginx-1.4.1/sbin/nginx -s stop
# cp objs/nginx /usr/local/nginx/sbin/nginx
# /usr/local/nginx-1.4.1/sbin/nginx
相比之下僅僅多了一步覆蓋nginx文件.
總
結,安裝nginx安裝第三方模塊實際上是使用–add-mole重新安裝一次nginx,不要make
install而是直接把編譯目錄下objs/nginx文件直接覆蓋老的nginx文件.如果你需要安裝多個nginx第三方模塊,你只需要多指定幾個
相應的–add-mole即可.
E. nginx能不能列印自定義的http header裡面的信息
nginx上有add_header參數,nginx對應虛擬主機里加:add_header Vary "Accept-Encoding, User-Agent" 重啟nginx,這個只是添加header 如果想完全自定義版header使用第權三方模塊
F. 有誰用nginx對post提交參數做過過濾
nginx在接受post請求時,網路斷開,臨時數據自動刪除,等待下一個請求。客戶端會提示請求超時,或才網路不可用。
G. 如何調整nginx和apache伺服器的header限制的大小
可以通過2個參數來調整nginx的header上限。
client_header_buffer_size 16k。
arge_client_header_buffers 4 16k。
H. nginx filter怎麼配置
#運行用戶
user nobody;
#啟動進程,通常設置成和cpu的數量相等
worker_processes 1;
#全局錯誤日誌及PID文件
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
#工作模式及連接數上限
events {
#epoll是多路復用IO(I/O Multiplexing)中的一種方式,
#僅用於linux2.6以上內核,可以大大提高nginx的性能
use epoll;
#單個後台worker process進程的最大並發鏈接數
worker_connections 1024;
# 並發總數是 worker_processes 和 worker_connections 的乘積
# 即 max_clients = worker_processes * worker_connections
# 在設置了反向代理的情況下,max_clients = worker_processes * worker_connections / 4 為什麼
# 為什麼上面反向代理要除以4,應該說是一個經驗值
# 根據以上條件,正常情況下的Nginx Server可以應付的最大連接數為:4 * 8000 = 32000
# worker_connections 值的設置跟物理內存大小有關
# 因為並發受IO約束,max_clients的值須小於系統可以打開的最大文件數
# 而系統可以打開的最大文件數和內存大小成正比,一般1GB內存的機器上可以打開的文件數大約是10萬左右
# 我們來看看360M內存的VPS可以打開的文件句柄數是多少:
# $ cat /proc/sys/fs/file-max
# 輸出 34336
# 32000 < 34336,即並發連接總數小於系統可以打開的文件句柄總數,這樣就在操作系統可以承受的范圍之內
# 所以,worker_connections 的值需根據 worker_processes 進程數目和系統可以打開的最大文件總數進行適當地進行設置
# 使得並發總數小於操作系統可以打開的最大文件數目
# 其實質也就是根據主機的物理CPU和內存進行配置
# 當然,理論上的並發總數可能會和實際有所偏差,因為主機還有其他的工作進程需要消耗系統資源。
# ulimit -SHn 65535
}
http {
#設定mime類型,類型由mime.type文件定義
include 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 logs/access.log main;
#sendfile 指令指定 nginx 是否調用 sendfile 函數(zero 方式)來輸出文件,
#對於普通應用,必須設為 on,
#如果用來進行下載等應用磁碟IO重負載應用,可設置為 off,
#以平衡磁碟與網路I/O處理速度,降低系統的uptime.
sendfile on;
#tcp_nopush on;
#連接超時時間
#keepalive_timeout 0;
keepalive_timeout 65;
tcp_nodelay on;
#開啟gzip壓縮
gzip on;
gzip_disable "MSIE [1-6].";
#設定請求緩沖
client_header_buffer_size 128k;
large_client_header_buffers 4 128k;
#設定虛擬主機配置
server {
#偵聽80埠
listen 80;
#定義使用 www.nginx.cn訪問
server_name www.nginx.cn;
#定義伺服器的默認網站根目錄位置
root html;
#設定本虛擬主機的訪問日誌
access_log logs/nginx.access.log main;
#默認請求
location / {
#定義首頁索引文件的名稱
index index.php index.html index.htm;
}
# 定義錯誤提示頁面
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
#靜態文件,nginx自己處理
location ~ ^/(images|javascript|js|css|flash|media|static)/ {
#過期30天,靜態文件不怎麼更新,過期可以設大一點,
#如果頻繁更新,則可以設置得小一點。
expires 30d;
}
#PHP 腳本請求全部轉發到 FastCGI處理. 使用FastCGI默認配置.
location ~ .php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
#禁止訪問 .htxxx 文件
location ~ /.ht {
deny all;
}
}
}
I. 如何讓nginx修改Response HTTP Header中的server的值
可以設置server_tokens,設置為off,則不顯示server欄位,設置為一個字元串,則server顯示為該字元串的值,用法如下(此為附加版本功能):
J. nginx配置文件詳解
一、安裝Nginx
在安裝Nginx之前,需確保系統已經安裝了gcc、 openssl-devel、 pcre-devel和zlib-devel軟體庫。
其中, –with-http_stub_status_mole 可以用來啟用 Nginx 的 NginxStatus 功能,以監控 Nginx 的運行狀態。
二、Nginx的配置文件結構
Nginx的配置文件nginx.conf位於其安裝目錄的conf目錄下。
nginx.conf由多個塊組成,最外面的塊是main,main包含Events和HTTP,HTTP包含upstream和多個Server,Server又包含多個location。
main(全局設置)、server(主機設置)、upstream(負載均衡伺服器設置)和 location(URL匹配特定位置的設置)。
1、main塊設置的指令將影響其他所有設置。
2、server塊的指令主要用於指定主機和埠。
3、upstream指令主要用於負載均衡,設置一系列的後端伺服器。
4、location塊用於匹配網頁位置。
這四者之間的關系式:server繼承main,location繼承server,upstream既不會繼承其他設置也不會被繼承。
在這四個部分當中,每個部分都包含若干指令,這些指令主要包含Nginx的主模塊指令、事件模塊指令、HTTP核心模塊指令,同時每個部分還可以使用其他HTTP模塊指令,例如Http SSL模塊、HttpGzip Static模塊和Http Addition模塊等。
三、Nginx的全局配置
events事件指令是設定Nginx的工作模式及連接數上限:
use是個事件模塊指令,用來指定Nginx的工作模式。Nginx支持的工作模式有select、poll、kqueue、epoll、rtsig和/dev/poll。
其中select和poll都是標準的工作模式,kqueue和epoll是高效的工作模式,不同的是epoll用在Linux平台上,而kqueue用在BSD系統中。對於Linux系統,epoll工作模式是首選worker_connections也是個事件模塊指令,用於定義Nginx每個進程的最大連接數,默認是1024。
最大客戶端連接數由worker_processes和worker_connections決定,即Max_client=worker_processes*worker_connections。
在作為反向代理時,max_clients變為:max_clients = worker_processes * worker_connections/4。
進程的最大連接數受Linux系統進程的最大打開文件數限制,在執行操作系統命令「ulimit -n 65536」後worker_connections的設置才能生效。
四、下面配置Nginx的HttpGzip模塊。這個模塊支持在線實時壓縮輸出數據流。
通過/opt/nginx/sbin/nginx -V命令可以查看安裝Nginx時的編譯選項,由輸出可知,已經安裝了HttpGzip模塊。
五、負載均衡配置
下面設定負載均衡的伺服器列表:
upstream是Nginx的HTTP Upstream模塊,這個模塊通過一個簡單的調度演算法來實現客戶端IP到後端伺服器的負載均衡。
在上面的設定中,通過upstream指令指定了一個負載均衡器的名稱cs.com。這個名稱可以任意指定,在後面需要的地方直接調用即可,Nginx的負載均衡模塊目前支持4種調度演算法。
六、server虛擬主機配置
下面介紹對虛擬主機的配置。
建議將對虛擬主機進行配置的內容寫進另外一個文件,然後通過include指令包含進來,這樣更便於維護和管理。
server標志定義虛擬主機開始,listen用於指定虛擬主機的服務埠,server_name用來指定IP地址或者域名,多個域名之間用空格分 開。index用於設定訪問的默認首頁地址,root指令用於指定虛擬主機的網頁根目錄,這個目錄可以是相對路徑,也可以是絕對路徑。
Charset用於 設置網頁的默認編碼格式。access_log用來指定此虛擬主機的訪問日誌存放路徑,最後的main用於指定訪問日誌的輸出格式。
七、location URL匹配配置
URL地址匹配是進行Nginx配置中最靈活的部分。 location支持正則表達式匹配,也支持條件判斷匹配,用戶可以通過location指令實現Nginx對動、靜態網頁進行過濾處理。使用location URL匹配配置還可以實現反向代理,用於實現PHP動態解析或者負載負載均衡。
以下這段設置是通過location指令來對網頁URL進行分析處理,所有擴展名以.gif、.jpg、.jpeg、.png、.bmp、.swf結尾的靜態文件都交給nginx處理,而expires用來指定靜態文件的過期時間,這里是30天。
八、StubStatus模塊配置
StubStatus模塊能夠獲取Nginx自上次啟動以來的工作狀態,此模塊非核心模塊,需要在Nginx編譯安裝時手工指定才能使用此功能。
stub_status設置為「on」表示啟用StubStatus的工作狀態統計功能。access_log 用來指定StubStatus模塊的訪問日誌文件。auth_basic是Nginx的一種認證機制。
auth_basic_user_file用來指定認證的密碼文件,由於Nginx的auth_basic認證採用的是與Apache兼容的密碼文件,因此需要用Apache的htpasswd命令來生成密碼文件。
然後輸入兩次密碼後確認之後添加用戶成功。
要查看Nginx的運行狀態,可以輸入http://ip/NginxStatus,輸入創建的用戶名和密碼就可以看到Nginx的運行狀態。
Active connections表示當前活躍的連接數,第三行的三個數字表示 Nginx當前總共處理了34561個連接, 成功創建次握手, 總共處理了354399個請求。
最後一行的Reading表示Nginx讀取到客戶端Header信息數, Writing表示Nginx返回給客戶端的Header信息數,「Waiting」表示Nginx已經處理完,正在等候下一次請求指令時的駐留連接數。
在最後這段設置中,設置了虛擬主機的錯誤信息返回頁面,通過error_page指令可以定製各種錯誤信息的返回頁面。在默認情況下,Nginx會在主目錄的html目錄中查找指定的返回頁面。
特別需要注意的是,這些錯誤信息的返回頁面大小一定要超過512K,否者會被ie瀏覽器替換為ie默認的錯誤頁面。