① 如何在nginx的access log中記錄post請求的參數
動互聯網行業開發過程中,服務端經常會需要檢查是否收到請求,收到什麼樣的請求,最簡單的辦法就是看的access log,常見的nginx配置中access log一般都只有GET請求的參數,而POST請求的參數卻不行。
$request_body
This variable(0.7.58+) contains the body of the request. The significance of this variable appears in locations with directives proxy_pass or fastcgi_pass.
正如上文件所示,只需要使用$request_body即可打出post的數據,在現存的server段加上下面的設置即可:
log_format access '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent $request_body "$http_referer" "$http_user_agent" $http_x_forwarded_for';
access_log logs/test.access.log access;
② 如何解決「504 Gateway Time-out」錯誤
情況一:由於nginx默認的fastcgi進程響應緩沖區太小造成
這種情況下導致fastcgi進程被掛起,如果fastcgi服務隊這個掛起處理不是很好的話,就可能提示「504 Gateway Time-out」錯誤。
2
情況一解決辦法:
默認的fastcgi進程響應的緩沖區是8K,我們可以設置大一點,在nginx.conf里,加入:fastcgi_buffers 8 128k
這表示設置fastcgi緩沖區為8塊128k大小的空間。
3
情況一解決辦法(改進):
在上述方法修改後,如果還是出現問題,我們可以繼續修改nginx的超時參數,將參數調大一點,如設置為60秒:
send_timeout 60;
經過這兩個參數的調整,結果沒有再提示「504 Gateway Time-out」錯誤,說明效果還是挺不錯的,問題基本解決。
4
情況二:PHP環境的配置問題
這里我們需要對php-fpm和nginx進行配置修改。因為這種情況下,也會出現「504 Gateway Time-out」錯誤提示。
5
情況二解決辦法( php-fpm配置修改):
將max_children由之前的10改為30,這樣操作是為了保證有充足的php-cgi進程可以被使用。
將request_terminate_timeout由之前的0秒改成60秒,這樣使php-cgi進程處理腳本的超時時間提高到60秒,可以防止進程被掛起以提高利用效率。
6
情況二解決辦法(nginx配置修改):
為了減少fastcgi的請求次數,盡量維持buffers不變,我們要更改nginx的幾個配置項,如下:
將fastcgi_buffers由4 64k改為2 256k;
將fastcgi_buffer_size 由64k改為128k;
將fastcgi_busy_buffers_size由128k改為256k;
將fastcgi_temp_file_write_size由128k改成256k。
7
情況二解決辦法修改完,我們需要重新載入php-fpm和nginx的配置,然後再進行測試。之後就沒有發現「504 Gateway Time-out」錯誤,效果也還是不錯的!
③ 如何在nginx的access log中記錄post請求的參數
http里定義:wwwlog
log_format wwwlog '$remote_addr - $remote_user [$time_local]
"$request"
'
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" $http_x_forwarded_for "$request_time"';
在include每個域名里後面加上wwwlog:
access_log /data/logs/access_mytv.log wwwlog;
於是在同樣的access後這樣寫:
nginx.conf
log_format access '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent $request_body "$http_referer" "$http_user_agent" $http_x_forwarded_for';
包含的justwinit.conf:
access_log /data/logs/access_mytv.log access
④ nginx能不能把一個請求過來的get參數接受,然後作為參數轉發到另一個地址
php端用__GET()獲取參數,然後用libcurl庫函數轉發至另一個URL地址。
⑤ nginx模塊開發如何獲取get請求的參數
ngx_int_t
ngx_http_arg(ngx_http_request_t *r, u_char *name, size_t len, ngx_str_t *value)
⑥ nginx request uri 包括請求參數嗎
$request_uri變數包括請求參數。
⑦ nginx 可以接收請求參數嗎
Nginx的http模塊在處理HTTP請求復時對環境變數制的封裝與Apache有所不同。除了支持一些與HTTP協議相關的通用的變數之外,還支持一系列Nginx自有的變數,如Nginx配置目錄下fastcgi_params.default文件里的$server_protocol、$nginx_version等。
⑧ nginx一致性hash分流策略支持請求的body某一欄位作為參數嗎
雖然記不清了,不過我記得得在配置文件對應伺服器IP後面加入down表示此server暫時不參與負載