• Nginx配置(全)


    安装

    * windows下:直接到官网下载windows下的稳定版本,解压到任意位置即可
    * Linux下:一种方式是yum或者sudo apt-get install 另一种是源码编译安装,先安装pcre、zlib库文件在./configure、make、make install
    

    启动

    * 正常启动:安装路径/sbin/nginx
    * 开机启动:centos5.x/6.x下可以自定义nginx启动脚本放在/etc/init.d/下,再chmod 755 /etc/init.d/nginx,chkconfig nginx on 即可
    

    虚拟主机配置

    基于IP、域名、PORT。链接:http://www.cnblogs.com/weblm/p/5537749.html

    域名跳转

    有时候我们有多个域名,希望通过一个域名跳转到另外一个,这个在nginx里是一个常用的设置,
    
      server_name  test.com  www.test.com;
    
        if ($host != 'www.test.com' ) {
            rewrite  ^/(.*)$  http:/www.test.com/$1  permanent;
        }
    

    屏蔽恶意USER_AGENT

    编辑conf/vhosts/test.conf文件,添加:
    
    #禁止Scrapy等工具的抓取,注意已经取消curl抓取
    if ($http_user_agent ~* (Scrapy|Curl|HttpClient)) {
         return 403;
    }
    #禁止恶意user_agent访问
    if ($http_user_agent ~ "FeedDemon|JikeSpider|Indy Library|Alexa Toolbar|AskTbFXTV|AhrefsBot|CrawlDaddy|CoolpadWebkit|Java|Feedly|UniversalFeedParser|ApacheBench|Microsoft URL Control|Swiftbot|ZmEu|oBot|jaunty|Python-urllib|lightDeckReports Bot|YYSpider|DigExt|HttpClient|MJ12bot|heritrix|EasouSpider|Ezooms|^$" ) {
         return 403;             
    }
    #禁止非GET|HEAD|POST方式的抓取
    if ($request_method !~ ^(GET|HEAD|POST)$) {
        return 403;
    }
    
    

    用户认证

    用户认证需要用到Apache的htpasswd工具,没有安装Apache的话可直接yum install -y httpd
    生成密码文件,创建用户
    
        htpasswd -c /usr/local/nginx/conf/.htpasswd  test // 添加test用户,第一次添加时需要加-c参数,第二次添加时不需要-c参数
    
    
    在nginx的配置文件中添加
    
        location  / {#可以指定目录
                          root /data/www/;
                          auth_basic              "Auth";
                          auth_basic_user_file   /usr/local/nginx/conf/.htpasswd;
                }
    

    访问控制

    限制只让某个ip访问 
    ```
    allow          219.232.244.234;
    deny           all;
    ```
    禁止某个IP或者IP段访问站点的设置方法
    
    首先建立下面的配置文件放在nginx的conf目录下面,命名为deny.ip   
    cat  deny.ip
    ```
    deny 192.168.1.11;
    deny 192.168.1.123;
    deny 10.0.1.0/24;
    ```
    在nginx的配置文件nginx.conf中加入:
    include deny.ip; 
    检测配置是否正确:/usr/local/nginx/sbin/nginx -t 
    重启一下nginx的服务:/usr/local/nginx/sbin/nginx  reload 就可以生效了。 
    deny.ip 的格式中也可以用deny all; 
    如果你想实现这样的应用,除了几个IP外,其他全部拒绝,
    那需要你在deny.ip 中这样写
    ```
    allow 1.1.1.1; 
    allow 1.1.1.2;
    deny all;
    ```
    有时候会根据目录来限制php解析:
    
        location ~ .*(diy|template|attachments|forumdata|attachment|image)/.*.php$ 
        {
            deny all;
        }
    

    防盗链

    在 nginx.conf中的server部分中添加如下代码
    
        location ~* ^.+.(gif|jpg|png|swf|flv|rar|zip|doc|pdf|gz|bz2|jpeg|bmp|xls)$ {   
                    valid_referers none blocked server_names  *.taobao.com *.baidu.com *.google.com *.google.cn *.soso.com ;  // 对这些域名的网站不进行盗链。
                    if ($invalid_referer) {
                        # return 403;
                            rewrite ^/ http://www.example.com/nophoto.gif;
                            }
                    }
    

    说明:如果前面配置中已经加了:

        location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$
                             {
                                     expires      30d;
                                     access_log off;
                             }
    

    那么会和这一部分重复,这时候上面的生效,所以,我们需要把两者合在一起。如下:

        location ~* ^.+.(gif|jpg|png|swf|flv|rar|zip|doc|pdf|gz|bz2|jpeg|bmp|xls)$  {
             expires 30d;  
             valid_referers none blocked server_names  *.taobao.com *.baidu.com *.google.com *.google.cn *.soso.com ;  // 对这些域名的网站不进行盗链。
             if ($invalid_referer) {
              #return 403;
                 rewrite ^/ http://www.example.com/nophoto.gif;
              }
              access_log off;
    }
    

    配置静态文件缓存

     location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$
            {
                    expires      30d;
                    access_log off;
            }
    
            location ~ .*.(js|css)$
            {
                    expires      12h;
                    access_log off;
            }
    

    伪静态

    if ($host ~* www.(.*)) {  
          set $host_without_www $1;  
          rewrite ^(.*)$ http://$host_without_www$1 permanent;  
    }  
    

    自定义访问/错误日志

    日志格式

    log_format main '$remote_addr - $remote_user [$time_local] $request '
                        '"$status" $body_bytes_sent "$http_referer" '
                        '"$http_user_agent" "$http_x_forwarded_for"';
    
    log_format main1 '$proxy_add_x_forwarded_for - $remote_user [$time_local] ' 
                          '"$request" $status $body_bytes_sent '
                          '"$http_referer" "$http_user_agent"';  //此日志格式为,ip不仅记录代理的ip还记录远程客户端真实IP。
    

    错误日志error_log日志级别
    error_log 级别分为 debug, info, notice, warn, error, crit 默认为crit, 该级别在日志名后边定义格式如下:
    error_log /your/path/error.log crit;
    crit 记录的日志最少,而debug记录的日志最多。如果你的nginx遇到一些问题,比如502比较频繁出现,但是看默认的error_log并没有看到有意义的信息,那么就可以调一下错误日志的级别,当你调成error级别时,错误日志记录的内容会更加丰富。

    日志切割

    编写脚本:
    vim /usr/local/sbin/logqiege.sh //加入

    #!/bin/bash
    datedirs=`date +%Y%m%d`
    /bin/mkdir  /home/logs/$datedirs >/dev/null 2>&1
    /bin/mv /home/logs/*.log /home/logs/$datedirs
    /bin/kill -HUP `cat /var/run/nginx.pid`
    
    
  • 相关阅读:
    Jmeter非GUI模式运行脚本
    vmware下 linux如何扩展磁盘空间
    (完美解决方案)Windows Server 2012 R2报错:无法启动此程序,因为计算机中丢失 apimswincrtstdiol110.dll 解决
    Python程序执行性能优化心得
    jmeter中TPS和吞吐量区别与联系
    Python多进程之Pool进程池浅析
    为什么Jmeter 运行时到达持续时间不停止?
    一些在线实用小工具
    笔记20171225
    JMeter 安装 linux平台
  • 原文地址:https://www.cnblogs.com/weblm/p/6107344.html
Copyright © 2020-2023  润新知