zoukankan      html  css  js  c++  java
  • ngnix之笔记

    #############################################################################

    我们在使用的时候会遇到很多的恶意IP攻击,这个时候就要用到Nginx 禁止IP访问了。下面我们就先看看Nginx的默认虚拟主机在用户通过IP访问,或者通过未设置的域名访问(比如有人把他自己的域名指向了你的ip)的时 候生效最关键的一点是,在server的设置里面添加这一行:
    listen 80 default;
    后面的default参数表示这个是默认虚拟主机。
    Nginx 禁止IP访问这个设置非常有用。
    比如别人通过ip或者未知域名访问你的网站的时候,你希望禁止显示任何有效内容,可以给他返回500.目前国内很多机房都要求网站主关闭空主机头,防止未备案的域名指向过来造成麻烦。就可以这样设置:
    server {
    listen 80 default;
    return 500;
    }
    也可以把这些流量收集起来,导入到自己的网站,只要做以下跳转设置就可以:
    server {
    listen 80 default;
    rewrite ^(.*) http://www.example.com permanent;
    }
    按照如上设置后,确实不能通过IP访问服务器了,但是在应该用中出现当server_name后跟多个域名时,其中一个域名怎么都无法访问,设置如下:
    server {
    listen 80;
    server_name www.example.com example.com
    }
    没更改之前,通过server_name 中的www.example.com example.com均可访问服务器,加入Nginx 禁止IP访问的设置后,通过example.com无法访问服务器了,www.example.com可以访问,用 Nginx -t 检测配置文件会提示warning:
    [warn]: conflicting server name “example.com” on 0.0.0.0:80,
    ignored
    the configuration file /usr/local/Nginx/conf/
    Nginx.conf syntax is ok
    configuration file /usr/local/Nginx/conf/Nginx.
    conf test is successful
    最后通过在listen 80 default;后再加server_name _;解决,形式如下:

    #禁止IP访问
    server {
    listen 80 default;
    server_name _;
    server_name www.example.com example.com
    return 500;
    }
    这样,通过example.com就能访问服务器了。

    #########################################################################################

    nginx 的proxy_intercept_errors 和error_page的搭配使用,

     

    proxy_intercept_errors 

     

    当上游服务器响应头回来后,可以根据响应状态码的值进行拦截错误处理,与error_page 指令相互结合。用在访问上游服务器出现错误,由nginx直接返回自定义的错误页面

    location /houtai {
    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass http://localhost:8080/houtai;
    proxy_intercept_errors on;
    }

    error_page 404 /404.html;
    error_page 500 502 503 504 /50x.html;

    location = /404.html {
    root /usr/share/nginx/html;
    internal;
    }

    location = /50x.html {
    root /usr/share/nginx/html;
    internal;

    参考页面:https://www.digitalocean.com/community/tutorials/how-to-configure-nginx-to-use-custom-error-pages-on-ubuntu-14-04

                      http://blog.csdn.net/hellolingyun/article/details/37934815

    #######################################################################

    对于有些服务端接口返回是固定值的json,可通过配置nginx直接返回json,减少程序的加载对资源的占用,减少接口响应时间
    通过return,指定页面返回的内容
     location ~* (request/update)$ {
         default_type application/json;
         return 200 '{"update":"no"}';
     }
    记得加default_type application/json ,不然浏览器打开时,是个文件。

    #########################################################################

    nginx 代理https后,应用redirect https变成http

    原因分析:

    浏览器到nginx是https,nginx到应用服务器变成http,

    应用服务器,再做302 redirect的时候,返回的redirect 地址就好变成http的地址;

    原因是spring mvc的servlet的secheme取值,request.getScheme()

    是取请求里的一个scheme值,所有这个值在nginx代理时要设置成https

    其中: request.getScheme() return http but not https.

    解决方法:

    目前是

    proxy_redirect http:// $scheme://;

    The same server needs to serve both HTTP and HTTPS, however, when the upstream issues a redirect (for instance, after a form is processed), all HTTPS requests are redirected to HTTP. The only thing I have found that will correct this issue is changing proxy_redirect to the following:

    proxy_redirect http:// https://;
    

    That works wonderfully for requests coming from HTTPS, but if a redirect is issued over HTTP it also redirects that to HTTPS, which is a problem.

    Out of desperation, I tried:

    if ($scheme = 'https') {
        proxy_redirect http:// https://;
    }

    ########################################################################

    网站它可能不希望被网络爬虫抓取,例如测试环境不希望被抓取,以免对用户造成误导,那么需要在该网站中申明,本站不希望被抓取。有如下方法:

    server { 

    listen 80; 

    server_name 127.0.0.1; 

    #添加如下内容即可防止爬虫

    if ($http_user_agent ~* "qihoobot|Baiduspider|Googlebot|Googlebot-Mobile|Googlebot-Image|Mediapartners-Google|Adsbot-Google|Feedfetcher-Google|Yahoo! Slurp|Yahoo! Slurp China|YoudaoBot|Sosospider|Sogou spider|Sogou web spider|MSNBot|ia_archiver|Tomato Bot") 

    return 403; 

    #########################################################################

    Nginx设置HTTP认证:

    1、安装htpassword来创建和生成加密的用户用于基础认证(Basic Authentication)
        sudo apt-get install apache2-utils

    2、在Nginx托管的网站目录下生成一个.htpasswd文件。如下的命令可以创建文件同步增加用户和加密的密码到文件中

         sudo htpasswd -c /etc/nginx/.htpasswd exampleuser
    3、网站的Nginx配置文件增加如下两行:
    auth_basic "Restricted";
    auth_basic_user_file /etc/nginx/.htpasswd;
  • 相关阅读:
    sublime text3 安装SublimeCodeIntel插件
    进入博客园的第一天
    .NET之Hangfire快速入门和使用
    图片相似性 d-hash算法 C#实践
    同一个Docker swarm集群中部署多版本的测试环境
    C#创建单链表,翻转单链表
    halcon例程学习 一维测量之矩形边缘
    halcon例程学习 一维测量之弧形边缘
    python 圆曲线
    python pygame黑客帝国的简单实现
  • 原文地址:https://www.cnblogs.com/wushank/p/11730577.html
Copyright © 2011-2022 走看看