#http to https
http {
server {
listen 443 ssl;
server_name www.example.com;
ssl_certificate /path/to/file;
ssl_certificate_key /path/to/file;
...
}
server {
listen 80;
server_name www.example.com;
rewrite ^(.*) https://$server_name$1 permanent;
}
}
#example.com to www.example.com
http {
server {
listen 80;
server_name www.example.com example.com;
return 301 https://www.example.com$request_uri;
}
要记得为根域名添加 DNS 记录,如果不添加的话,怎么改 Nginx 的配置都是不行的。来自我亲身经历的教训:)
#https://example.com
to https://www.example.com
http {
server {
listen 80;
server_name www.example.com example.com;
return 301 https://www.example.com$request_uri;
}
server {
listen 443 ssl http2;
server_name example.com;
return 301 https://www.example.com$request_uri;
}
server {
listen 443 ssl http2;
server_name www.example.com;
ssl_certificate /path/to/ssl.pem;
ssl_certificate_key /path/to/ssl-key.pem;
location / {
root /home/www/public;
index index.html;
}
}
}
#Configure with Docker
用到了 nginx-proxy。
nginx-proxy 的 docker-compose 文件:
version: "3"
services:
nginx-proxy:
image: nginxproxy/nginx-proxy:alpine
container_name: nginx-proxy
ports:
- "80:80"
- "443:443"
volumes:
- /var/run/docker.sock:/tmp/docker.sock:ro
- certs:/etc/nginx/certs:ro
- conf:/etc/nginx/conf.d
- /etc/nginx/vhost.d:/etc/nginx/vhost.d
- html:/usr/share/nginx/html
restart: always
environment:
- VIRTUAL_PROTO=https
- VIRTUAL_PORT=443
acme-companion:
image: nginxproxy/acme-companion
container_name: nginx-proxy-acme
depends_on:
- nginx-proxy
volumes:
- /etc/nginx/vhost.d:/etc/nginx/vhost.d
- html:/usr/share/nginx/html
- certs:/etc/nginx/certs:rw
- acme:/etc/acme.sh
- /var/run/docker.sock:/var/run/docker.sock:ro
network_mode: bridge
environment:
- DEFAULT_EMAIL=me@tianhegao.com
- NGINX_PROXY_CONTAINER=nginx-proxy
restart: always
volumes:
conf:
html:
certs:
acme:
networks:
default:
name: nginx-proxy
博客的 docker-compose 文件:
version: "3.9"
services:
nginx:
image: nginx:stable
restart: always
volumes:
- /home/www/public:/usr/share/nginx/html
expose:
- 80
- 443
environment:
- VIRTUAL_HOST=www.yidajiabei.xyz,yidajiabei.xyz
- LETSENCRYPT_HOST=www.yidajiabei.xyz,yidajiabei.xyz
blog:
image: tianheg/hugo:0.99.1
volumes:
- ...
- ...
environment:
- HUGO_BASEURL=https://www.yidajiabei.xyz/
networks:
default:
name: nginx-proxy
在 vhost.d 中创建 yidajiabei.xyz 文件:
return 301 $scheme://www.yidajiabei.xyz$request_uri;
$scheme
包含了 http 和 https。