Apache升级到Nginx几点注意事项

发布时间:2020-11-20编辑:脚本学堂
本文介绍下,在将web服务器从apache升级到nginx时的几个注意要点,有需要的朋友参考学习下。

本节主要内容:
apache升级到nginx时的注意事项。

问题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错误的请求全部交给一个代理去执行。
或写上本地路径。

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;

我所知道的注意点,就这几条了,希望可以帮助到有需要的朋友吧。