当前位置:  操作系统/服务器>linux
本页文章导读:
    ▪Apache升级到Nginx几点注意事项      本节主要内容: apache升级到nginx时的注意事项。 问题1,当访问服务器上的一个目录时,不会自动加上一个/ ,浏览器会给出改页无法打开的错误,此时浏览器去取的地址实际上是upstream中所.........
    ▪Nginx关闭日志的方法      在使用Nginx做Web服务器时,如果没有处理好日志,日志文件可能会很迅速增长。 此时,可以修改nginx.conf 找到access_log:   代码示例: access_log /dev/null; error_log /dev/null; 日志就不会记录到具体.........
    ▪Nginx支持手机访问(WAP/XHTML)相关配置      1、判断手机用户 一般通过User-Agent来判断,我的配置里加上了Java、curl和Wget,方便调试和其它内部项目的抓取。 现在很多手机网关没有发送User-Agent,所以大部分手机发送的User-Agent到了网关就.........

[1]Apache升级到Nginx几点注意事项
    来源: 互联网  发布时间: 2013-12-24

本节主要内容:
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;

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


    
[2]Nginx关闭日志的方法
    来源: 互联网  发布时间: 2013-12-24

在使用Nginx做Web服务器时,如果没有处理好日志,日志文件可能会很迅速增长。

此时,可以修改nginx.conf 找到access_log:
 

代码示例:
access_log /dev/null;
error_log /dev/null;

日志就不会记录到具体的文件了,而是将全部的访问日志、错误日志输出到/dev/null设备文件中。

修改完,重启Nginx( kill -HUP `cat logs/nginx.pid` )即可。
 

您可能感兴趣的文章:
nginx 日志分析的实例学习
Nginx日志模块分析详解
Nginx日志分析 Nginx日志切割与Awstats配置
nginx日志配置、Nginx日志分割
有关nginx日志格式的设计分享
nginx日志统计访问时间的例子
nginx日志配置文件的格式说明
一个分割ngnix网站日志的Shell脚本
nginx日志报大量400错误的解决方法
nginx关闭favicon.ico日志记录的方法
nginx与apache日志格式的区别
nginx日志中记录cookie的实现方法
修改nginx访问日志的时间格式的方法
Nginx日志中过滤关键字的写法
nginx 日志分析实例


    
[3]Nginx支持手机访问(WAP/XHTML)相关配置
    来源: 互联网  发布时间: 2013-12-24

1、判断手机用户

一般通过User-Agent来判断,我的配置里加上了Java、curl和Wget,方便调试和其它内部项目的抓取。

现在很多手机网关没有发送User-Agent,所以大部分手机发送的User-Agent到了网关就被过滤掉了,相当于是空值。

User-Agent为空且为手机用户比例比较大。
有部分User-Agent为空的是一些蜘蛛或垃圾程序的造访,这些垃圾流量并不那么重要。
希望手机网关将来有相应的标准,不要发送空的User-Agent,就是发送一个字母也好啊。

如果应用有一个独立域名,也未必要做手机判断。譬如新浪有独立域名且深入人心,那它做不做跳转无关紧要。

nginx配置用穷举方式罗列各类手机User-Agent并把空User-Agent也转到手机应用里,非这些情况,则跳到帮助页面。
 

代码示例:
set $ismob 0;
if ( $http_user_agent ~ "^((.*MIDP.*)|(.*WAP.*)|(.*UP.Browser.*)|(.*Smartphone.*)|(.*Obigo.*)|(.*Mobile.*)|(.*AU.Browser.*)|(.*wxd.Mms.*)|(.*WxdB.Browser.*)|(.*CLDC.*)|(.*UP.Link.*)|(.*KM.Browser.*)|(.*UCWEB.*)|(.*SEMC\-Browser.*)|(.*Mini.*)|(.*Symbian.*)|(.*Palm.*)|(.*Nokia.*)|(.*Panasonic.*)|(.*MOT\-.*)|(.*SonyEricsson.*)|(.*NEC\-.*)|(.*Alcatel.*)|(.*Ericsson.*)|(.*BENQ.*)|(.*BenQ.*)|(.*Amoisonic.*)|(.*Amoi\-.*)|(.*Capitel.*)|(.*PHILIPS.*)|(.*SAMSUNG.*)|(.*Lenovo.*)|(.*Mitsu.*)|(.*Motorola.*)|(.*SHARP.*)|(.*WAPPER.*)|(.*LG\-.*)|(.*LG/.*)|(.*EG900.*)|(.*CECT.*)|(.*Compal.*)|(.*kejian.*)|(.*Bird.*)|(.*BIRD.*)|(.*G900/V1.0.*)|(.*Arima.*)|(.*CTL.*)|(.*TDG.*)|(.*Daxian.*)|(.*DAXIAN.*)|(.*DBTEL.*)|(.*Eastcom.*)|(.*EASTCOM.*)|(.*PANTECH.*)|(.*Dopod.*)|(.*Haier.*)|(.*HAIER.*)|(.*KONKA.*)|(.*KEJIAN.*)|(.*LENOVO.*)|(.*Soutec.*)|(.*SOUTEC.*)|(.*SAGEM.*)|(.*SEC\-.*)|(.*SED\-.*)|(.*EMOL\-.*)|(.*INNO55.*)|(.*ZTE.*)|(.*iPhone.*)|(.*Android.*)|(.*Windows CE.*)|(Wget.*)|(Java.*)|(curl.*)|(Opera.*))$" )
{
set $ismob 1;
proxy_pass http://m.;
}
if ( $http_user_agent ~ ^$ )
{
set $ismob 1;
proxy_pass http://m.;
}
if ( $ismob = 0 )
{
rewrite "^.*$" http://help.m./ permanent;
}

2、Content-Type类型

手机浏览器和普通电脑访问页面有所不同,绝大多数手机不支持text/html这种Content-Type格式。

在web服务方面,除了要做出合适手机浏览的页面,另外一个重要的事情就是要把Content-Type弄对了。

一般手机使用的是text/vnd.wap.wml和application/xhtml+xml,听说text/vnd.wap.wml是老式手机专用,application/xhtml+xml是3g标准指定的Content-Type,另外charset需要指明为UTF-8。

所以,Content-Type类似如下:
 

代码示例:
Content-Type: application/xhtml+xml; charset=UTF-8

对于动态页面,Content-Type可以在程序里设定。

譬如php:
 

代码示例:
header("Content-Type: application/xhtml+xml; charset=UTF-8")

jsp的话,把顶头的page做下修改即可。
动态程序中的设定,到了nginx上默认会继承,所以不用太多考虑。

nginx要做的一个是静态页面,另一个是302跳转。

静态页面的Content-Type改起来不麻烦,修改mime.types:
 

代码示例:
application/xhtml+xml                 html htm shtml;
application/xhtml+xml                 xml;

把需要的扩展名对应的类型改一改就好了。
然后,在nginx.conf里指定charset UTF-8。

麻烦的是301和302跳转,nginx中使用rewrite的redirect和permanent跳转时,Content-Type怎么改都会是text/html,使用add_header,Content-Type变成了两行,没能达成目的。

用代理到动态程序固然行,但性能和稳定性又成了问题。
最后查阅了nginx源码,发现这个text/html是写死的……

修改c代码:
这里调试的是nginx 0.7.30版的,文件:
 

代码示例:
vi ./src/http/ngx_http_special_response.c
568  //r->headers_out.content_type_len = sizeof("text/html") - 1;
569  //r->headers_out.content_type.len = sizeof("text/html") - 1;
570  //r->headers_out.content_type.data = (u_char *) "text/html";

把568 569 570这三行代码注释掉,就可以让nginx跳转时不发送Content-Type。
在电脑的IE/FF浏览器上没有Content-Type也能正常跳转。

必要的话,可以写上Content-Type,可以使用add_header定义:
 

代码示例:
add_header Content-Type "text/html";

手机的content-type类型为:
 

代码示例:
add_header Content-Type "application/xhtml+xml";

    
最新技术文章:
▪linux系统中的列出敏感用户的脚本代码
▪a10 config backup for aXAPI
sqlserver iis7站长之家
▪nagios 分发文件实现代码
▪阿里云云服务器Linux系统更新yum源Shell脚本
▪一个监控LINUX目录和文件变化的Shell脚本分享
▪Linux下实现SSH免密码登录和实现秘钥的管理、...
▪Shell正则表达式之grep、sed、awk实操笔记
▪3个备份系统文件并邮件发送的Shell脚本分享
▪CentOS 6.3下给PHP添加mssql扩展模块教程
▪监控网站是否可以正常打开的Shell脚本分享
▪shell脚本编程之if语句学习笔记
▪shell脚本编程之循环语句学习笔记
▪shell脚本编程之case语句学习笔记
▪Shell脚本实现的阳历转农历代码分享
▪Shell脚本实现复制文件到多台服务器的代码分...
▪Shell脚本实现批量下载网络图片代码分享
▪Shell脚本实现检测文件是否被修改过代码分享
▪Shell脚本数组用法小结
▪Shell脚本批量重命名文件后缀的3种实现
▪C语言实现的ls命令源码分享
▪Linux下查找后门程序 CentOS 查后门程序的shell脚...
▪Shell 函数参数
▪linux shell 自定义函数方法(定义、返回值、变...
▪Shell实现判断进程是否存在并重新启动脚本分...
▪Shell脚本break和continue命令简明教程
▪Shell脚本函数定义和函数参数
▪让代码整洁、过程清晰的BASH Shell编程技巧
▪shell常用重定向实例讲解
▪awk中RS、ORS、FS、OFS的区别和联系小结
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3