使用nginx配置域名及禁止直接通过IP访问网站
前段时间刚搭建好个人网站,一直没有关注一个问题,那就是IP地址也可以访问我的网站,今天就专门研究了一下nginx配置问题,争取把这个问题研究透彻。
1. nginx配置域名及禁止直接通过IP访问
先来看nginx的默认配置,ubuntu默认位置 /etc/nginx/sites-enabled 。
(注意:sites-enabled里的配置其实是软链接,链接到sites-available下的真实配置,这是nginx的一种最佳实践,希望我们在sites-available下修改配置,等修改好以后在链接到sites-enabled下,不过我这里没采纳这种最佳实践,直接在sites-enabled目录下增加配置,哈哈。)
# default
server {
listen 80 default_server;
listen [::]:80 default_server; server_name _; root /var/www/html; index index.html index.htm index.nginx-debian.html; }
最简单的配置nginx的方式就是直接改这个default文件,加上自己的网站配置:
# default
server {
listen 80 default_server;
listen [::]:80 default_server; server_name www.domain.com; root /path/to/www.domain.com; index index.html index.htm; }
不过,不推荐这种方式。如果这样配置,恶意用户可以用自己的域名指向我们的IP,蹭我们的流量,来养他的域名,非常讨厌。
我更推荐把这个配置复制一份,在复制的配置里修改网站信息。
cp default domain-website
然后修改信息:
# domain-website
server {
listen 80; # 去掉这里的default_server
listen [::]:80; # 去掉这里的default_server server_name www.domain.com; # 修改自己的域名 root /path/to/www.domain.com; # 指向网站文件根目录 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.0-fpm.sock;
} }
这样配置就很灵活了,方便我们禁止IP访问和别人把域名恶意指向我们的IP。
想要禁止IP访问的话,就修改default配置:
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
return 500; # 添加这句,当用IP访问时,返回500错误码
}
这也同样可以阻止别人恶意把域名指向我们的服务器IP,蹭我们的流量。
2. 配置https
如果是配置了https,我们就增加一个default-ssl配置文件:
# default-ssl
server {
listen 443 ssl default_server;
listen [::]:443 ssl default_server; #ssl on;
ssl_certificate cert/www.domain.com.pem; # SSL证书和密钥
ssl_certificate_key cert/www.domain.com.key; server_name _; return 500; }
注意:一定要加上自己的SSL证书和密钥,不然会导致域名的https无法访问。
正常网站https配置:
# domain-website-ssl
server {
listen 443;
listen [::]:443; ssl on;
ssl_certificate cert/www.domain.com.pem; # SSL证书和密钥
ssl_certificate_key cert/www.domain.com.key;
ssl_session_timeout 30m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_prefer_server_ciphers on; server_name www.domain.com; # 域名 root /path/to/www.domain.com; # 网站文件根目录 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.0-fpm.sock;
} }
3. 如何解决别人域名恶意指向自己服务器IP的问题以及搜集流量
如果按照我上面的配置方法,那么就不怕别人把域名指向我们的IP了。要是在应用上述配置之前就已经有恶意域名指向我们IP了,怎么办呢,没问题,我们可以把这些域名重定向到我们自己的域名,相当于把这些流量都搜集起来,导入到自己的域名。
对default和default_ssl做如下修改:
# default
server {
listen 80 default_server;
listen [::]:80 default_server; server_name _; #return 500; # 添加这句,当用IP访问时,返回500错误码
return 301 https://www.domain.com; //把IP和其他域名访问的流量永久重定向到我们的域名 }
和:
# default_ssl
server {
listen 443 ssl default_server;
listen [::]:443 ssl default_server; #ssl on;
ssl_certificate cert/www.domain.com.pem; # SSL证书和密钥
ssl_certificate_key cert/www.domain.com.key; server_name _; return 500;
return 301 https://www.domain.com; //把IP和其他域名访问的流量永久重定向到我们的域名 }
还可以把自己域名http重定向到https:
server {
listen 80;
listen [::]:80;
server_name www.domain.com;
return 301 https://$server_name$request_uri;
}
至此,就解决了被别人用域名恶意蹭流量的问题。

--End--
(本文同时发表在我的个人网站: https://www.guozhenyi.com/index.php/archives/25/)
使用nginx配置域名及禁止直接通过IP访问网站的更多相关文章
- Nginx配置实例-负载均衡实例:平均访问多台服务器
场景 Nginx配置实例-反向代理实例:根据访问的路径跳转到不同端口的服务中: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/10 ...
- Nginx如何设置禁止IP访问网站
需要禁止IP访问网站.在相关的server中设置相关的限制即可.
- 禁止北京地区IP访问站点
<script type="text/javascript" src="http://counter.sina.com.cn/ip" charset=&q ...
- 通过ASP禁止指定IP和只允许指定IP访问网站的代码
过ASP禁止指定IP和只允许指定IP访问网站的代码,需要的朋友可以参考下. 一.禁止指定IP防问网站,并执行相应操作: 代码如下: <% Dim IP,IPString,VisitIP '设置I ...
- vue配置手机通过IP访问,Win10让局域网内其他电脑通过IP访问网站的方法
vue配置手机通过IP访问config/index.js// Various Dev Server settings host: '0.0.0.0', // can be overwritten by ...
- Nginx配置域名转发实例
域名:cps.45wan.com 所在阿里云主机:123.35.9.12 45wan没有在阿里云备案 67wan已经在阿里云备案 阿里云主机(假如123.35.9.12)上原来的nginx配置: ...
- Nginx网站使用CDN之后禁止用户真实IP访问的方法
做过面向公网WEB的运维人员经常会遇见恶意扫描.拉取.注入等图谋不轨的行为,对于直接对外的WEB服务器,我们可以直接通过 iptables .Nginx 的deny指令或是程序来ban掉这些恶意请求. ...
- Linux下Nginx配置阿里云 SSL证书实现HTTPS访问
这篇文章主要介绍了nginx配置ssl证书实现https访问的示例 1.服务器系统:Centos 2. 阿里云申请SSL证书 选择“免费版DV SSL”,点击立即购买: 下载证书 列表中找到已签发的证 ...
- Nginx 指定域名(或子域名)和网站绑定
问题起因 博主最近在 CentOS 上面部署另外一个网站,但并不想通过端口号来访问,因为端口号对于 SEO 优化不利,且用户访问较繁琐(使用域名不就是为了方便用户访问吗?再引入端口号岂不是和使用域名的 ...
随机推荐
- 基于 abp vNext 和 .NET Core 开发博客项目 - 博客接口实战篇(二)
系列文章 基于 abp vNext 和 .NET Core 开发博客项目 - 使用 abp cli 搭建项目 基于 abp vNext 和 .NET Core 开发博客项目 - 给项目瘦身,让它跑起来 ...
- JDBC化繁为简
众所周知,jdbc可谓是java连接数据库最基本的方法,通过DriverManager拿到connection,再从connection拿到statement,再从statement中进一步操作得到结 ...
- Java实现 LeetCode 786 第 K 个最小的素数分数(大小堆)
786. 第 K 个最小的素数分数 一个已排序好的表 A,其包含 1 和其他一些素数. 当列表中的每一个 p<q 时,我们可以构造一个分数 p/q . 那么第 k 个最小的分数是多少呢? 以整数 ...
- Java实现 LeetCode 784 字母大小写全排列(DFS)
784. 字母大小写全排列 给定一个字符串S,通过将字符串S中的每个字母转变大小写,我们可以获得一个新的字符串.返回所有可能得到的字符串集合. 示例: 输入: S = "a1b2" ...
- Java实现蓝桥杯日志统计
标题:日志统计 小明维护着一个程序员论坛.现在他收集了一份"点赞"日志,日志共有N行.其中每一行的格式是: ts id 表示在ts时刻编号id的帖子收到一个"赞" ...
- Java实现 洛谷 P1200 [USACO1.1]你的飞碟在这儿Your Ride Is He…
import java.util.Scanner; public class Main{ private static Scanner cin; public static void main(Str ...
- java实现显示为树形
** 显示为树形** 树形结构应用十分广泛. 下面这段代码根据用户添加的数据,在内存中构建一个逻辑上等价的树形结构. 通过ShowTree() 可以把它显示为控制中的样子. 其中: a.add('a' ...
- (十一)DVWA全等级SQL Injection(Blind)盲注--手工测试过程解析
一.DVWA-SQL Injection(Blind)测试分析 SQL盲注 VS 普通SQL注入: 普通SQL注入 SQL盲注 1.执行SQL注入攻击时,服务器会响应来自数据库服务器的错误信息,信息提 ...
- xmake v2.3.4 发布, 更加完善的工具链支持
为了让xmake更好得支持交叉编译,这个版本我重构了整个工具链,使得工具链的切换更加的方便快捷,并且现在用户可以很方便地在xmake.lua中扩展自己的工具链. 关于平台的支持上,我们新增了对*BSD ...
- 【Java Spring Cloud 实战之路】添加一个SpringBootAdmin监控
0. 前言 在之前的几章中,我们先搭建了一个项目骨架,又搭建了一个使用nacos的gateway网关项目,网关项目中并没有配置太多的东西.现在我们就接着搭建在Spring Cloud 微服务中另一个重 ...