全球主机交流论坛

标题: Lnmp Nginx下怎么禁止IP直接访问网站? [打印本页]

作者: 唐王李世民    时间: 2024-7-10 15:27
标题: Lnmp Nginx下怎么禁止IP直接访问网站?
本帖最后由 唐王李世民 于 2024-7-10 16:26 编辑

  求教一个问题,在Lnmp下,Nginx怎么设置禁止IP访问呢?谢谢大佬们了。

1、已经设置了 /usr/local/nginx/conf/nginx.conf 加上了一行

server {
listen 80 default_server;
server_name _;
return 444; #加上了这一行
}

现在是http下有效果了,已经不能使用IP直接访问网站了。但是https还照样没有效果,哪果加上 listen 443; 这一行,https打开网站就打开不了。

2、服务器上有几个网站,分别都开了http和https,现在应该怎么设置呢?

问题解决了,谢谢各位回复的大佬们了,感谢!在 /usr/local/nginx/conf/nginx.conf 中那个80的server段上边加这一段就可以了。

  1. server
  2.    {
  3.        listen 443 default_server;
  4.        server_name _;
  5.        return 444;
  6.        ssl_reject_handshake on;
  7.    }
复制代码

作者: 职业菜鸟    时间: 2024-7-10 15:28
自签一个证书  然后 跟 http 一样 但是注意配置上证书,  这样访问 IP 就不暴漏 域名了。
作者: ljty    时间: 2024-7-10 15:32
把这个server删掉不行吗。
作者: Crownsecular    时间: 2024-7-10 15:34
专门给ip也开个server不就行了,域名走域名的,ip走ip的
作者: 唐王李世民    时间: 2024-7-10 15:35
Crownsecular 发表于 2024-7-10 15:34
专门给ip也开个server不就行了,域名走域名的,ip走ip的

lnmp下怎么操作呢?
谢谢您了
作者: 闪电五连鞭    时间: 2024-7-10 15:42
https这样写
server
   {
       listen 443 default_server;
       listen [::]:443;
       server_name _;
       ssl_reject_handshake on;
   }
作者: 心外无物    时间: 2024-7-10 15:47
在LNMP(Linux, Nginx, MySQL, PHP)环境下,禁止通过IP地址访问网站可以通过Nginx配置来实现。以下是具体的步骤:

找到并编辑Nginx的配置文件:
通常,Nginx的配置文件位于 /etc/nginx/nginx.conf 或者 /etc/nginx/conf.d/ 目录下。你需要找到你的网站对应的配置文件。

添加禁止IP访问的规则:
在你的网站server块中,添加一个新的server块,用于匹配通过IP地址的访问请求,并返回403 Forbidden状态码。具体配置如下:

nginx
Copy code
server {
    listen 80;
    server_name 你的服务器IP地址;

    return 403;
}
然后在你现有的server块中配置正常的域名访问:

nginx
Copy code
server {
    listen 80;
    server_name yourdomain.com;

    # 其他配置
    root /path/to/your/website;
    index index.php index.html index.htm;
   
    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.4-fpm.sock;  # 视具体PHP版本而定
    }

    # 其他配置
}
重启Nginx服务:
保存配置文件后,检查配置文件是否有语法错误并重启Nginx服务:

sh
Copy code
sudo nginx -t
sudo systemctl restart nginx
通过上述配置,当用户尝试通过IP地址访问你的服务器时,将会被返回403 Forbidden错误,而通过域名访问则正常处理。

注意:

将 你的服务器IP地址 替换为你实际的服务器IP地址。
如果你有多个域名或多站点,需要在对应的server块中进行相应的配置。
作者: 唐王李世民    时间: 2024-7-10 15:50
闪电五连鞭 发表于 2024-7-10 15:42
https这样写
server
   {

这个加在哪里呢?/usr/local/nginx/conf/nginx.conf 这个文件里吗?


作者: 唐王李世民    时间: 2024-7-10 15:51
心外无物 发表于 2024-7-10 15:47
在LNMP(Linux, Nginx, MySQL, PHP)环境下,禁止通过IP地址访问网站可以通过Nginx配置来实现。以下是具体 ...

我的配置除了 /usr/local/nginx/conf/nginx.conf 这个配置文件外
/usr/local/nginx/conf/vhost 这个目录下有一些我域名的conf文件
您的这个要加在哪里呢?
作者: dual    时间: 2024-7-10 15:56
nginx.conf


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

server
        {
                listen 443 ssl default_server;
                ssl_reject_handshake on;
        }


作者: karson    时间: 2024-7-10 15:57
本帖最后由 karson 于 2024-7-10 16:00 编辑
唐王李世民 发表于 2024-7-10 15:50
这个加在哪里呢?/usr/local/nginx/conf/nginx.conf 这个文件里吗?


跟你之前写的80端口的server block并排

  1. server {
  2.   listen 80 default_server;
  3.   ...
  4. }

  5. server {
  6.   listen 443 default_server;
  7.   ...
  8. }
复制代码

作者: 何处不惹尘埃    时间: 2024-7-10 15:59
给 IP 地址开一个 vhost, 配置 server_name 为你的 IP 地址就行了. 然后 IP 默认返回 404/403 就可以了. 也可以配置个自签名证书

----------------------------------------------------------------

小尾巴~~~~~
作者: 唐王李世民    时间: 2024-7-10 16:05
dual 发表于 2024-7-10 15:56
nginx.conf

这样设置打不开80了,强制全部跳转到443了

现在http全部自动跳转到https了

作者: Microcharon    时间: 2024-7-10 16:08
本帖最后由 Microcharon 于 2024-7-10 16:09 编辑
  1. server
  2.     {
  3.         listen 80;
  4.         listen [::]:80;
  5.         server_name your-ipv4;
  6.         index index.html index.htm index.php default.html default.htm default.php;
  7.         root  /home/wwwroot/default;

  8. ...
  9. ...

  10.     }

  11. server
  12.     {
  13.         listen 443 default_server;
  14.         listen [::]:443;
  15.         server_name _;
  16.         ssl_reject_handshake on;
  17.     }
复制代码


https server段是这样写的
作者: karson    时间: 2024-7-10 16:09
唐王李世民 发表于 2024-7-10 16:05
这样设置打不开80了,强制全部跳转到443了

现在http全部自动跳转到https了

这样设置是打不开80,但是不会跳443啊。。
再说了还有站使用http吗,基本https都成刚需了吧,没https浏览器都给你来个大红标
作者: NVMe    时间: 2024-7-10 16:13
試試這個

  1. server
  2.     {
  3.         listen 80 default_server;
  4.         #listen [::]:80 default_server;
  5.         listen 443 ssl default_server;
  6.         #listen [::]:443 ssl default_server;

  7.         server_name _;

  8.         set $empty "";
  9.         ssl_ciphers aNULL;
  10.         ssl_certificate data:$empty;
  11.         ssl_certificate_key data:$empty;

  12.         return 444;
  13.     }
  14.        
复制代码

作者: 唐王李世民    时间: 2024-7-10 16:26
谢谢各位大佬们了,问题解决了。
作者: yajian    时间: 2024-7-10 16:43
server {
  listen 80;
  # 禁止所有 IP 访问
  deny all;
}

server {
  listen 80;
  server_name example.com www.example.com;

  location / {
    root /var/www/html;
    index index.html index.htm;
  }
}

顺序很重要






欢迎光临 全球主机交流论坛 (https://fd.vvwvv.eu.org/) Powered by Discuz! X3.4