vps交流

【已解决】如何用nginx 禁止ip直接访问网站,只允许域名...


本帖最后由 casm 于 2021-12-16 12:28 编辑

百度出来都是一样的答案
server {
   listen   80 default;   
   server_name _;   
    return 403;  
}
在结尾加这个server,nginx配置文件直接报错


感谢热情MJJ,已经解决,

先把默认的配置 这个default去掉:
server {
   listen   80 default;   #去掉default
   …
   …
}

然后安装按照楼下Silently的代码,在配置文件底部,新增一个server就行

用宝塔重载配置会提示
nginx: [warn] conflicting server name "_" on 0.0.0.0:80, ignored
无需理会

  1. server {
  2.         listen 80 default_server;
  3.         listen [::]:80 default_server;
  4.         listen 443 default_server;
  5.         listen [::]:443 default_server;
  6.         ssl_reject_handshake on;
  7.         server_name _;
  8.         return 444;
  9. }

复制代码

默认nginx配置域名就好了
请问我如何百度搜索?
用的宝塔吗?
  1. server {
  2.   listen       80;
  3.   server_name  123.123.123.123(改成你的IP地址);
  4.   return 403;
  5. }

复制代码

这样试试

正常绑定域名的,ip不能访问,你的是反代项目吗,反代的话不放行反代端口就行了
你这个元老啊
给你的服务器 IP 自签一个证书,也可以用在线网站:https://myssl.com/create_test_cert.html
如果用在线网站的话,域名写 IP,有效期选 5 年,生成后要把根证书和证书内容合并到一个文件中。
然后创建一个虚拟主机,配置文件大概就是这样(记得改示例中的证书文件和 IP):

  1. server
  2. {
  3.     listen 80 default_server;
  4.     listen 443 ssl http2 default_server;
  5.     server_name 你的IP;
  6.     ssl_certificate /etc/nginx/conf.d/default.pem;
  7.     ssl_certificate_key /etc/nginx/conf.d/defaultkey.pem;
  8.     ssl_protocols TLSv1.2 TLSv1.3;
  9.     return 444;
  10. }

复制代码

这样访问 https://ip 的话,就不会暴露其他网站的证书了,同时也会被直接断开链接(444 状态码最省资源)
也可以加上这两行,限制该虚拟主机只允许服务器内部访问。

  1. allow 127.0.0.0/8;
  2. deny  all;

复制代码

或者你可以看一下 Nginx 官方文档,不需要自签证书也可能实现一样效果:
https://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_reject_handshake

既然报错,你就要说具体的报错信息
不然谁知道呢