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所以导致冲突没生效。
所以啊,遇上这种配置好了结果各种问题的要先检查下自己的配置。有问题请留言评论!
专业从事搬砖多年,还是在继续搬砖中,厚积薄发~