-
创建文件目录
mkdir -p /docker/nginx/conf/conf.d /docker/nginx/html /docker/nginx/log /docker/nginx/cert touch /docker/nginx/conf/nginx.conf
-
创建nginx容器
docker run -itd --name nginx -p 80:80 -p 443:443 \ -v /docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \ -v /docker/nginx/conf/conf.d:/etc/nginx/conf.d \ -v /docker/nginx/html:/usr/share/nginx/html \ -v /docker/nginx/log:/var/log/nginx \ -v /docker/nginx/cert:/etc/nginx/cert \ nginx
- -P 80:80 -p 443:443
- 宿主机和容器做端口映射,443端口是为了配置SSL
- -v /docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf
- nginx.conf是nginx的核心配置文件,映射到宿主机便于管理
- -v /docker/nginx/conf/conf.d:/etc/nginx/conf.d
- conf.d 目录我一般用来存网站的配置文件,映射到宿主机便于管理
- -v /docker/nginx/html:/usr/share/nginx/html
- /usr/share/nginx/html 目录主要存放的是静态网页文件
- -v /docker/nginx/log:/var/log/nginx
- /var/log/nginx 是nginx的日志目录,映射到宿主机,便于查看nginx访问日志或者错误日志
- -v /docker/nginx/cert:/etc/nginx/cert
- /etc/nginx/cert 是我自己创建用来存放SSL证书的目录
- -P 80:80 -p 443:443
-
申请SSL证书
网上有很多获取证书的方法,这里就不赘述了。我申请的阿里云的免费证书,可以参考这篇文章
证书申请成功并下载以后,分别是一个key和crt文件,上传到服务器 /docker/nginx/cert 目录,就像这样:
root@hecs-148770:~# ls /docker/nginx/cert/ scswww.bbbwdc.com.crt scswww.bbbwdc.com.key
-
网站配置
如果是云服务器,请确保安全组规则允许访问80和443端口
/docker/nginx/conf/nginx.conf
user root;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
# Nginx默认配置为1M,在上传Halo主题时会导致上传失败
client_max_body_size 50M;
include /etc/nginx/conf.d/*.conf;
}
我的网站配置:/docker/nginx/conf/conf.d/bbbwdc.conf
server {
listen 443 ssl;
server_name www.bbbwdc.com;
# SSL证书文件路径
ssl_certificate /etc/nginx/cert/scswww.bbbwdc.com.crt;
# SSL证书私钥文件路径
ssl_certificate_key /etc/nginx/cert/scswww.bbbwdc.com.key;
# 访问日志
access_log /var/log/nginx/access_bbbwdc.log;
# 错误日志
error_log /var/log/nginx/error_bbbwdc.log;
# 指定使用的SSL协议版本。这里使用了TLSv1.2和TLSv1.3
ssl_protocols TLSv1.2 TLSv1.3;
# 指定使用的加密算法套件
ssl_ciphers HIGH:!aNULL:!MD5;
# 指定服务器偏好的加密算法套件
ssl_prefer_server_ciphers on;
# 指定SSL会话缓存的类型和大小。这里选择了共享缓存,大小为10MB
ssl_session_cache shared:SSL:10m;
# 指定SSL会话的超时时间。这里设置为10分钟
ssl_session_timeout 10m;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
proxy_pass http://你的服务器IP:8080;
}
}
注意更换为自己的服务器IP
配置修改后,记得重启容器,查看容器日志检查配置是否生效
- http 转 https
上面的配置完成以后,你会发现在浏览器访问443端口是https,但是访问其他端口还是http,所以我们需要将所有http请求重定向到https
我的重定向配置在:/docker/nginx/conf/conf.d/default.conf
server {
listen 80;
server_name bbbwdc.com;
access_log /var/log/nginx/access_bbbwdc.log;
error_log /var/log/nginx/error_bbbwdc.log;
# 转发规则
location / {
proxy_pass http://你的服务器IP:443;
# 设置代理相关的头信息
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
重启nginx容器
ok,这样一个简单的Nginx服务器就配置完成啦,可以打开我的博客看下效果。
评论区