写在前面
博主最近去申请了ssl证书捣鼓了一下https踩了一些坑特地来记录一下。阿里云有免费ssl可以申请,部署过程也有帮助文档而且也比较简单就不再赘述了。
时效与环境
最后更新时间:2020年5月4日
OS:Ubuntu 18.04 LTS
Nginx:nginx/1.14.0 (Ubuntu)
nginx配置结构(apt安装版)
以下针对使用apt安装方法介绍,apt安装后的nginx结构类似于apache。
若是编译安装可以参考,结构基本一致。
在提供方法前,有必要先介绍nginx的目录结构,以便理解。若只是希望查看方法可以跳过该部分。
# 概览
/etc/nginx
|- nginx.conf #主配置文件
|- sites-available #存放站点配置文件
|- defalut
|- 其它自定义配置文件
|- sites-enabled #存放站点配置文件的链接
|- defalut(链接)
|- 其它自定义启用站点链接
主配置文件:/etc/nginx/nginx.conf
#####################
# 只截取部分配置!!!!#
#####################
http {
#################################################
# 配置ssl部分,如果是全局启用的话可以放在http块里面 #
# 若想配置多级域名,并且不是通配符证书,请放server块中!#
#################################################
# 配置ssl证书,只要放在一个能找到的位置就好了
ssl_certificate /etc/nginx/cert/xxx.com.pem;
ssl_certificate_key /etc/nginx/cert/xxx.com.key;
# 配置ssl验证相关
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; # Dropping SSLv3, ref: POODLE
ssl_prefer_server_ciphers on;
# log设置
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
# 虚拟站点设置。include是为了方便配置,可以理解为将以下路径的文件内容复制到这里,说到底nginx读配置只是读这个文件。
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*; # 特别要注意这里,这个目录下其实都是软连接,实际配置在sites-available
}
虚拟站点配置文件夹:/etc/nginx/sites-available
这个文件夹用于配置虚拟站点,可以参考default文件来编写,但是写完并不表示启用,要在sites-enabled
文件夹中添加软连接指向你写的新配置文件才代表启用。
default文件(默认配置)
# 只截取部分配置!!!!
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
try_files $uri $uri/ =404;
}
}
虚拟站点启用文件夹:/etc/nginx/sites-enabled
这个文件夹里都是软连接,指向/etc/nginx/sites-available
里的文件,若要启用一个站点则可以创建软连接,使用命令ln -s 软连接名称 /etc/nginx/sites-available/新虚拟站点配置文件
。这样通过软连接管理站点是否启用,方便维护。
跳转方法一:rewrite
server {
listen 80; #监听ipv4
listen [::]:80; #监听ipv6
server_name xxx.com www.xxx.com; #虚拟主机域名
rewrite ^(.*)$ https://$host$1 permanent; #rewrite跳转
}
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name xxx.com www.xxx.com;
root /var/www/xxx;
index index.html index.htm index.nginx-debian.html;
location / {
try_files $uri $uri/ =404;
}
}
跳转方法二:return 301
server {
listen 80; #监听ipv4
listen [::]:80; #监听ipv6
server_name xxx.com www.xxx.com; #虚拟主机域名
return 301 https://$server_name$request_uri; #return 301
}
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name xxx.com www.xxx.com;
root /var/www/xxx;
index index.html index.htm index.nginx-debian.html;
location / {
try_files $uri $uri/ =404;
}
}
重启nginx
配置后需要重启nginx
,博主之前用了nginx -s reload
死活不成功,后面发现必须要用service nginx restart
或者/etc/init.d/nginx restart
,又或者nginx -s stop
然后再调用nginx -c 配置文件
启动nginx。