引言
Nginx是一个高性能的HTTP和反向代理服务器,广泛用于Web服务中。在部署Nginx时,我们可能需要关闭默认站点和空主机头,以增强安全性和避免不必要的跳转。
今天,简单聊下在 nginx 上如何禁止IP直接访问、防止域名恶意解析、防止多站点在同一个服务器上,错误跳转。
注意哈,不是你跟着我敲就行的,不同情况不同对待,特别是某些小白你用的那种一键安装的脚本,看见我就头疼。
关闭默认站点
默认站点是Nginx在没有找到匹配的服务器块时会使用的配置。关闭默认站点可以防止用户通过IP直接访问服务器,从而增强安全性。
什么意思,比如你的服务器ip 192.168.1.1
上面跑了两个站,一个叫test.example.com
, 一个叫abc.example.com
,那你现在是不是这两个域名都是A记录到了192.168.1.1
?
那我不通过域名,直接访问192.168.1.1
,返回的那个网页内容就是我的默认网站。
比如我nginx配置了
http {
# 如果没有在代码中声明 default server 则按照代码顺序,
# 第一个 server 会被隐式的设为 default server
# 参考:https://segmentfault.com/a/1190000015681272
# 我下面配置了default,那这个第一个就不是default,那我先注释掉这一段。
#server {
# listen 80;
# server_name _; # _ 并不是重点 __ 也可以 ___也可以
# return 403; # 403 forbidden
#}
server {
listen 80;
server_name test.example.com;
...
}
server {
listen 80;
server_name abc.example.com;
...
}
# 定义一个 default server,这样就不是默认第一个为 default,
# 因为这配置文件,你也可能搞不懂哪个在前,哪个在后面的这种狗屁顺序。
# 小记:nginx 批量载入配置 conf 时会按 ascii 排序载入,
# 这就会以 server_a.conf server_b.conf server_c.conf 的顺序载入,
# 如果没有声明 default_server 的话
# 那 server_a 会作为默认的 server 去处理 未绑定域名/ip 的请求。
# 所以为了避免这种情况,我建议你规范配置。
server {
listen 80 default_server;
server_name _;
return 403; # 403 forbidden
}
}
好,上面这个配置文件的意思就是test.example.com
和abc.example.com
正常访问,但是直接访问我那个ip192.168.1.1
就403。懂了不。
所以关闭了默认站点,就避免被发现ip或者通过ip访问造成某些不必要的操作。
步骤一:定位默认站点配置
默认站点通常在Nginx的配置文件中定义。在Ubuntu系统中,这个文件通常位于/etc/nginx/sites-available/default
。
步骤二:修改配置文件
-
打开配置文件:
sudo vim /etc/nginx/sites-available/default
-
找到
listen
指令,并视情况注释掉或删除它:# listen 80; # 不要盲目蛮干
-
保存并退出编辑器。
步骤三:重载Nginx配置
sudo nginx -s reload
禁止空主机头
空主机头指的是没有指定域名的服务器块。禁止空主机头可以防止域名恶意解析和多站点间的莫名跳转。
步骤一:检查现有配置
检查Nginx配置文件,查找是否有没有指定server_name
的server
块。
步骤二:修改配置
-
打开Nginx配置文件:
sudo vim /etc/nginx/nginx.conf
-
在
http
块中,确保所有的server
块都有明确的server_name
指令:server { listen 80; server_name example.com; ... }
-
删除或注释掉所有没有
server_name
的server
块。
提示,这段是AI生成的,我感觉他说的不完全对,某些一键脚本他就是没有
server_name
这段,那你删了不就没办法工作了哦,有问题你在我博客下面留言吧。
步骤三:重载Nginx配置
sudo nginx -s reload
增强安全性的额外措施
使用SSL/TLS
为站点启用SSL/TLS加密可以提高安全性,防止数据在传输过程中被窃取。
配置防火墙
使用防火墙规则限制访问,只允许来自特定IP或特定端口的访问。
注意: 本文提供的步骤和指令可能需要根据你的操作系统和Nginx安装方式进行适当的调整。
事实上没什么必要,现在都用面板
配置低的服务器,安装不了面板,只能手动配置。
还有一部分因为各种原因只能手动配置的
对于大部分人来说,还是很有用的~