1. 程式人生 > >apache升級到了nginx的幾個注意點

apache升級到了nginx的幾個注意點

最近把整站從apache升級到了nginx,客戶的站點大概有30臺伺服器大部分架構位tomcat+apache,只有一個php頁面 一下是我升級遇到的幾個問題的注意點 1.  當我們去訪問伺服器上的一個目錄時候,他不會自動加上一個/ ,瀏覽器會給出改頁無法開啟的錯誤,這個時候瀏覽器去取的地址實際上是upstream中所寫的地址和埠或如果沒有使用upstream時 當使用localhost做servername時候 瀏覽器會去訪問http://127.0.0.1/dir。 解決辦法 在每個虛擬主機的server定義中加上 if (-d $request_filename) {                            rewrite ^/(.*)([^/])$ http://$host/$1$2/ permanent;                 } 注意 root欄位的定義也一定要出現在server中 如果server中沒有定義root 錯誤還將存在 例子: server {                 listen                800;                 server_name 

www.1.com;                 root   /opt/1-index;   //這邊定義了 就會在目錄訪問的時候加上/  如果這邊沒有定義這個 上面的url重寫依然不會生效                 include                vhost/alias.conf;                 include                vhost/proxy.conf;                 if (-d $request_filename) {                            rewrite ^/(.*)([^/])$ http://$host/$1$2/ permanent;                 }                 error_page   405 =200 @405;                 location @405 {                 proxy_pass      http://PROXY_STATIC;                 }                 location / {                         root   /opt/1-index;        //只在這邊定義是沒有用的,這邊甚至可以不做定義                         rewrite ^/(/d+)/.home$ /index.html?userId=$1 last;                         index  index.html index.htm;                 }                         2.url重寫的注意事項: 原有的url支援正則  重寫的url不支援正則 rewrite ^/(/d+)/.home$ /index.html?userId=$1 last; 這個重寫中 ^/(/d+)/.home$ 這部分支援正則  而/index.html?userId=$1 不要用正則 也不匹配正則 /index.html?*userId=$1 這樣他就會去找.html?*userId=$1這個url 然後給你個404 not found 3.post方式去訪問靜態檔案 Apache、IIS、Nginx等絕大多數web伺服器,都不允許靜態檔案響應POST請求,否則會返回“HTTP/1.1 405 Method not allowed”錯誤。(但是之前程式在apache上跑 沒問題) 如果有這個需求呢 就要做如下配置了 error_page   405 =200 @405;                 location @405 {                 proxy_pass      http://PROXY_STATIC;         #        root /usr/local/nginx/html;                 } 把所有405錯誤重定向成200 然後吧所有405錯誤的請求全部交給一個代理去執行 或者寫上本地路徑,因為我的路徑比較多 所以重定向請求到一臺web伺服器上了 4.。關於防盜鏈  1.com的需求是 不是從本來來的請求給除一個403  因為在虛擬主機裡配置毫無作用 可能是我們用的是虛擬目錄的緣故  所以我們直接對目錄做的防盜鏈  在alias裡 別名配置                 location /res/ {                 alias   /opt/Src/;                 valid_referers none blocked server_names *.1.com ;                 if ($invalid_referer) {         return 403;                 }         } 5,關於動態請求轉發 location  ~ ^/login/(.*/.do)$ {                 proxy_pass      http://login ;         proxy_set_header  X-Real-IP  $remote_addr; } ~ ^/login/(.*/.do)$ 這個表示 凡是匹配/login/ 下 .do的都轉發到一個upstream池裡處理 這裡的$符號並不起多大作用 只要是有.do的他會全部轉 並不是以.do結尾的才轉 6.關於php上傳檔案大小的問題 只改php裡的配置是沒有用的 需要更改的地方還有nginx的配置 client_max_body_size 10M; 他的預設值是1M; 以上就是基本的注意