nginx如何配置域名未匹配站点,以捕获所有流量?
发布于 作者:苏南大叔 来源:程序如此灵动~苏南大叔来聊一个非常实用的nginx
配置。目前,一般的网站都是买个虚机的服务器,然后一个服务器上面放置多个站点。那么,这种情况下,如果忘了配置某个站点的根目录,对应的域名流量就会白白的浪费了。对于,有很多个域名,但是真实站点确没有几个的人来说,这种情况非常常见。
本文测试环境:宝塔面板@7.5.2
,nginx@1.18.0
。本文虽然是基于宝塔面板的,但是适用于所有的nginx
容器的情况。
背景提示
苏南大叔在这里以宝塔面板为例,说明如何截获这种自然流量。首先前提是:所有站点都是设置了vhost
的,在vhost
目录下面的所有配置文件都是可以生效的。一个配置文件放进去,nginx
做个reload
操作,就可以生效了。
上述背景知识,如果不晓得话,可以参考苏南大叔的下面的文章链接:
匹配所有未匹配站点
在vhost
目录下面,(宝塔的路径是:/www/server/panel/vhost/nginx
),放置一个0.default.conf
文件,名字其实不重要。但是,有个排序的意义在里面。(这里,大家可以联想一下,是不是有些人的微信名都是要强加个a
字符?这里是一样的道理。)
配置的内容是:
server
{
listen 80;
server_name _;
index index.html;
root /www/server/nginx/html;
error_page 404 /404.html;
# error_page 404 = http://www.baidu.com/error.html;
}
这个配置的内容,是苏南大叔修改过的。里面制定了server_name _
,这里其实制定为啥乱七八糟的字符串都可以。只要是不匹配,就会走到这里进行处理。当然,使用_
来表达的话,即优雅又实用。
这里,先制定了这种情况下的html
根目录,同时还制定了最常见的404
页面的处理方案。而宝塔默认的html
里面,并没有404.html
这个文件,所以,您还是可以自己创建一个比较好。或者直接跳转到某个链接地址也是可以的。
443端口
如果再加上捕获443
端口的流量的话,配置可以修改成下面的:
server
{
listen 80;
listen 443 ssl http2;
server_name _;
index index.html;
root /home/wwwroot/0.default;
error_page 404 /404.html;
#SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则
if ($server_port !~ 80){
rewrite ^(/.*)$ http://$host$1 permanent;
}
#HTTP_TO_HTTPS_END
#error_page 404/404.html;
ssl_certificate /www/server/panel/vhost/cert/newsn.net/fullchain.pem;
ssl_certificate_key /www/server/panel/vhost/cert/newsn.net/privkey.pem;
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
add_header Strict-Transport-Security "max-age=31536000";
error_page 497 https://$host$request_uri;
#SSL-END
}
当然,配置中的证书肯定是不生效的。但是,这样配置后,https
的流量就可以被捕捉到了,虽然浏览器上还是有特殊的提示信息。但,总归是可以控制这部分流量的走向了。
效果
上述配置文件放置到vhost
目录下之后,需要对nginx
重新加载配置操作(或者重新启动nginx
),就可以生效了。效果就是:任何指向该ip
的域名,访问的时候,都会被匹配到该目录下面,并且对于404
页面也做了控制。那么一个index.html
和一个404.html
,就可以写自己的流量控制逻辑了。对吧?
至于具体的流量控制逻辑,就您自己设置吧?下面的截图,是宝塔面板捕获到这种没有绑定站点时的流量时,所显示的界面,你需要做的就是修改这个界面。
这个页面的地址也就是nginx
的配置中的root
字样配置中的地址:
root /www/server/nginx/html;
相关链接
- https://newsn.net/say/mac-nginx-apache-2.html
- https://newsn.net/say/mac-nginx-apache.html
- https://newsn.net/say/nginx-sub_filter.html
总结
没有被nginx
匹配到的域名,该如何处理呢?例如:阿里云说,您的服务器上面有非法的域名(其实是别的域名指向了你的ip
),或者很多你的域名指向了一个服务器,但是又懒得配置太多域名。这些类似的问题,都可以在本文中找到答案。
更多nginx
的配置小技巧,可以参考苏南大叔的博客:
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。