nginx只允许域名访问,禁止ip访问

网上一搜一大堆配置文件。大部分都是对的。下面我说下我遇到的问题。先给上对的配置图

无非就是添加虚拟空主机头,然后nginx识别到返回固定值403-404或者500更或者是自定义的错误页

[root@localhost nginx]# find / -name nginx.conf
/etc/nginx/nginx.conf
[root@localhost nginx]# vi /etc/nginx/nginx.conf    编辑这个文件页。nginx加载的是这个配置。

编辑这个文件一定要把新添加的内容放在前面,因为配置是从上往下匹配规则的。

   server {
      listen 80 default;
       server_name _;
#       return 403;  ##这里可以选择403或者404-500甚至自定义网页
         rewrite ^(.*) http://www.xxxx.com;  ###我这个是为了避免我的网站ip访问的流量流失,做了重定向至自己的域名
    }

然后重启nginx生效

systemctl restart nginx.service

注意我的这个nginx.conf文件是没有域名那些指定的,我最下面这句话就是nginx.conf加载指定配置文件。具体可以看我连接:https://www.cnblogs.com/Crazy-Liu/p/10879740.html
新添加的这个代码一定要放在其他配置文件之前。所以我之前放在nginx.conf上

现在我说说我遇到的问题。一开始我就这么设置结果各种问题,要么是域名ip都打不开或者就是域名能打开ip打不开。这种情况一定是配置文件冲突了,不用想!!

我错的是在这这个问题上冲突了。我的nginx.conf已经配置是加载/etc/nginx/conf.d/下的所有.conf文件,而恰恰我这个conf.d/这个目录下不止一个.conf文件,一个是备份的旧文件,而且我的这个旧文件里面的虚拟机主机头是ip的。下面贴出冲突的错误配置代码:

server{
listen             80;                    #监听的端口号
server_name     xxx.xxx.xxx.xxx;    #您的域名     
      location / {
          root /home/www/xxx.com;        #站点的路径
          index index.php index.html index.htm;
          if (!-e $request_filename) {
              rewrite ^(.*)$ /index.php$1 last;
          }
      }
location ~ ^.+.php {
          root /home/www/xxx.com;        #站点的路径
          fastcgi_pass 127.0.0.1:9000;    #根据自己的 php-fpm 配置填写
          fastcgi_index index.php;
          ###配置支持pathinfo
          fastcgi_split_path_info ^((?U).+.php)(/?.+)$;
            fastcgi_param PATH_INFO $fastcgi_path_info;
            fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
          fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
          include fastcgi_params;
      }
    }

因为我是设置多域名了所以把这个原本的配置文件备份了,结果nginx.conf是加载我指定目录下的所有.conf文件,把备份的旧的文件也读取了。而旧文件server_name xxx.xxx.xxx.xxx; 写的是ip所以导致冲突没生效。

所以啊,遇上这种配置好了结果各种问题的要先检查下自己的配置。有问题请留言评论!

原文地址:https://www.cnblogs.com/Crazy-Liu/p/10880283.html