zoukankan      html  css  js  c++  java
  • Nginx配置http请求重定向到https、Nginx防止被域名恶意解析的配置-Nginx 的 default_server 指令

    一、nginx 配置 http 请求重定向到 https

      server段{}可以这样写:

    // 方式1
    rewrite ^/(.*)$ http://domain.com/$1 permanent;
    
    // 方式2
    rewrite ^ http://domain.com$request_uri? permanent;
    
    // 方式3
    rewrite ^(.*)$ https://${server_name}$1 permanent; 

      nginx新版本可以换个写法,如下:

    server {
      listen      80;
      server_name wan.bo.com;
      return      301 https://$server_name$request_uri;
    }
    
    server {
      listen       443 ssl;
      server_name  wan.bo.com;
    
      ssl on;
      ssl_certificate      /etc/nginx/cert/web.jisuoffice.com.crt;
      ssl_certificate_key  /etc/nginx/cert/web.jisuoffice.com.key;
      ssl_session_timeout 5m;
      ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
      ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
      ssl_prefer_server_ciphers on;
      ·····
    }

      我采用的配置如下写:

    server {
        listen      80;
        server_name aaa.abc.dd;
        rewrite     ^(.*)$ https://${server_name}$1 permanent;
    }

      这样就可以 http://aaa.abc.dd 转到 https://aaa.abc.dd 了。

    二、Nginx防止被域名恶意解析的配置

      先说结论,我们的配置:

    server {
        listen      80 default_server;
        server_name _;
        return      444;
    }

      再说为什么要加这个配置呢?网上查的问题如下:

    今天太倒霉了,发现通过IP无法访问服务器的80端口很无语,昨天都还好的啊,也没有修改过配置,其他端口又是正常的,防火墙也没问题。于是问了下机房,给了个崩溃的回复说我们的服务器有个域名没有备案被电信多次通告,然后就把我们ip端口给封了。。。。封了啊。。。疯了,关键是这个域名TMD不是我的啊

    经过一番折腾,发现是 nginx 配置上貌似有个漏洞,导致任何域名解析到服务器都能被正常请求,虽然是个空白页,但HTTP状态码是200。

    主要是缺少下面的配置代码:

    server {
        listen       80  default_server;
        server_name  _;
        access_log   off;
        return       444;
    }

    这样在浏览器端访问的时候,浏览器会自动提示用户无法访问。

    三、Nginx 的 default_server 指令

    server {
        listen       80  default_server;
        server_name  oschina.net  www.oschina.net;
        ...
    }

      先看上面这段配置,listen 指令后面有一个参数 default_server ,这个参数是在 0.8.21 版本以后才有的,而之前是 default 指令。

      Nginx 的虚拟主机是通过HTTP请求中的Host值来找到对应的虚拟主机配置,如果找不到呢?那 Nginx 就会将请求送到指定了 default_server 的 节点来处理,如果没有指定为 default_server 的话,就跑到 localhost 的节点,如果没有 localhost 的节点,那只好 404 了。

      另外你也可以指定对于没有匹配的 Host 值时,返回错误到客户端,这在现在国内用来处理未备案域名指向自己时非常有用,看看下面的配置:

    server {
        listen       80  default_server;
        server_name  _;
        return       444;
    }

      通过返回444这个Nginx的非标准错误码来让Nginx断开与浏览器之间的连接。

  • 相关阅读:
    mysql命令集锦
    linux 删除文件名带括号的文件
    linux下的cron定时任务
    struts2文件下载的实现
    贴一贴自己写的文件监控代码python
    Service Unavailable on IIS6 Win2003 x64
    'style.cssText' is null or not an object
    "the current fsmo could not be contacted" when change rid role
    远程激活程序
    新浪图片病毒
  • 原文地址:https://www.cnblogs.com/goloving/p/15208227.html
Copyright © 2011-2022 走看看