Nginx配置(HTTPS && HTTP自动跳转HTTPS && 禁止IP访问)

最近把服务器迁移到了国内的腾讯云,然后需要备案了。等了十来天拿到备案号,将域名和服务器绑定了起来。于是就给网站配置全HTTPS,并且将HTTP请求转发到了HTTPS,并把通过IP直接访问进行了拦截。

一、Nginx配置HTTPS

我的系统是Ubuntu 16.04.1 LTS

1、申请证书

个人域名申请免费的DV证书就好,有很多申请的地方,比如阿里云腾讯云freessl等等,这里就不赘述了。

2、上传证书

申请的证书一般为两个文件,一个是xxxx.pem,一个是xxxx.key。

在服务器创建一个文件夹,我创建在了/etc/nginx/cert这下面,然后通过vim新建文件把内容复制过去,具体的步骤就不展开了。

3、配置nginx

Nginx的默认配置文件在/etc/nginx/nginx.conf。

修改配置文件在http {}中加入以下内容。

加#号是需要修改的内容。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
server {
listen 443 ssl;
server_name lqwang.net *.lqwang.net; # 域名信息
ssl on;
root /var/www/blog; # 博客文件根目录地址
index index.html index.htm;
ssl_certificate /etc/nginx/cert/full_chain.pem; # pem证书地址
ssl_certificate_key /etc/nginx/cert/private.key; # key证书地址
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
fastcgi_param HTTPS on;
fastcgi_param HTTP_SCHEME https;
location / {
index index.html index.htm;
}
}

保存后执行命令

1
nginx -s reload

如果什么都没有打印说明配置成功,如果有报错信息请根据报错信息具体解决。

二、配置HTTP自动跳转HTTPS

网站配置过HTTPS后,需要把HTTP的链接自动跳转到HTTPS,也就是把所有的80端口请求转发到443端口,配置文件地址请看上方,具体配置如下。

1
2
3
4
5
server {
listen 80;
server_name lqwang.net *.lqwang.net; #域名地址
rewrite ^(.*)$ https://${server_name}$1 permanent;
}

保存后执行命令同上。

三、禁止IP直接访问

如果有人把他的域名绑定到你的IP上,那么访问他的IP也是可以打开你的网站内容的,这样是不安全的。还有直接访问IP也是可以打开网站的,这样也是不优雅的,于是直接禁止掉IP的访问,同时其他域名访问也直接返回400。具体配置如下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
server {
listen 80 default_server;
server_name _;
return 400;
}

server {
listen 443;
server_name _;
ssl on;
# 证书地址配置
ssl_certificate /etc/nginx/cert/full_chain.pem;
ssl_certificate_key /etc/nginx/cert/private.key;
return 400;
}

四段代码位置随意。

这样https域名可以访问,http域名会自动调整到https,IP直接访问不管是http://ip还是https://ip都会直接返回400,其他人域名访问服务器的ip,也会因为server_name不符合直接跳400页面的。


# Nginx

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×