天天看點

apache更新到了nginx的幾個注意點

最近把整站從apache更新到了nginx,客戶的站點大概有30台伺服器大部分架構位tomcat+apache,隻有一個php頁面

一下是我更新遇到的幾個問題的注意點

1.

解決辦法

在每個虛拟主機的server定義中加上

if (-d $request_filename) {

                           rewrite ^/(.*)([^/])$ http://$host/$1$2/ permanent;

                }

注意 root字段的定義也一定要出現在server中 如果server中沒有定義root 錯誤還将存在

例子:

server {

                listen                800;

                root   /opt/1-index;   //這邊定義了 就會在目錄通路的時候加上/  如果這邊沒有定義這個 上面的url重寫依然不會生效

                include                vhost/alias.conf;

                include                vhost/proxy.conf;

                if (-d $request_filename) {

                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;

        #        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;

以上就是基本的注意

繼續閱讀