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;

以上就是基本的注意點

(本文轉載自CU論壇)

發表評論

(required)

This site uses Akismet to reduce spam. Learn how your comment data is processed.