nginx实现域名绑定

生产环境利用nginx对后端服务器进行反向代理和负载均衡,再把外网域名解析到nginx的vip地址,这样在外网可以通过域名访问WEB服务。但是如果不对域名进行绑定的话,用户通过ping域名拿到IP地址,通过IP地址也可以直接访问到WEB服务,这一点不符合国家的政策法规。本文介绍如何利用nginx实现域名绑定,禁止用户通过IP地址直接访问WEB服务.

利用nginx的default_server可以很容易地实现该功能:

    server {
        listen 1.1.1.1:80 default_server;
        server_name _;
        return 403;
    }

    server {
        listen       1.1.1.1:80;
        server_name  mydomain.com;

        location / {
                  proxy_pass http://x.x.x.x:80;
        }
    }

上述nginx配置中有两个server都监听了1.1.1.1地址的80端口,第一个server设置为default_server, server_name为任意域名;第二个server域名设置为mydomain.com. 当http请求到达nginx时,如果是通过mydomain.com访问的(header中Host字段为mydomain.com),则该请求会匹配到第二个server, 由该server进行处理,否则由第一个default server进行处理,default server直接返回403禁止访问状态码。

上述配置中,不是通过mydomain.com访问nginx, 会直接返回403的状态码, 返回页面为nginx默认的403错误页面,如下图所示:


image

如果需要替换这个默认的静态的403页面,可以把default server配置成一个静态的server, 请求匹配到该server时直接返回一个自定义的403页面,nginx配置如下所示:

     server {
            listen 10.0.0.25:5601 default_server;
            server_name _;
            index 403.html;
     }
     server {
        listen       1.1.1.1:80;
        server_name  mydomain.com;

        location / {
                  proxy_pass http://x.x.x.x:80;
        }
     }

这样不通过mydomain.com访问nginx,就可以返回自定义的403错误页面了:


image

你可能感兴趣的:(nginx实现域名绑定)