本文简记使用 Nginx 容器进行反向代理和 SSL 配置。
在 server{}
块中的 localtion
块:
server{
listen 80;
server_name localhost;
location / {
proxy_pass http://192.168.1.110;
}
}
排列:
(= 匹配) > (路径匹配) > (开头路径匹配) > (正则匹配) > (通用匹配) > (默认/匹配)
示例:
(location =) > (location /xxx/) > (location ^~) > (location ~/~*) > (location /xxx) > (location /)
示例:
location = / {
......
}
精准匹配,主机名后面不能跟任何字符串。
示例:
locatio /xxx/ {
......
}
精准匹配,只匹配主机名后面 /xxx/
字符串。
示例:
location /XXX {
......
}
匹配以 XXX
或 /xxx
开头的路径。
示例:
location ~ /XXX {
......
}
匹配以 XXX
或 /xxx
开头的路径。
实际上
示例:
location ^~ /XXX/ {
......
}
匹配以 XXX
或 /xxx
开头的路径。
示例:
~* \. (gif/jpg/png)$ {
......
}
匹配以 gif/jpg/png
结尾的路径。
我的 Nginx 配置示例:
upstream rasamber-owncloud{
server 192.168.1.110:10100;
}
upstream rasamber-pi-dashboard{
server 192.168.1.110:10000;
}
server{
listen 80;
return 301 https://$host$request_uri;
}
server{
listen 443 ssl;
server_name rasamber;
# SSL 设置
......
# HSTS
add_header Strict-Transport-Security "max-age=15552000; includeSubdomains; preload; connect-src *";
location /owncloud/ {
proxy_pass http://rasamber-owncloud/owncloud/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Cookie $http_cookie;
proxy_cookie_path /owncloud/ /;
client_max_body_size 5000M;
}
location /pi-dashboard/ {
proxy_pass http://rasamber-pi-dashboard/pi-dashboard/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Cookie $http_cookie;
proxy_cookie_path /pi-dashboard/ /;
}
location / {
root /etc/nginx/conf.d/nginxHtml;
index index.html index.htm;
}
}
一些参数:
更多请参阅: Nginx 反向代理 owncloud 问题处理 。
client_max_body_size
:Nginx 默认只允许传输 2M 大小的文件,owncloud 传输文件动辄几百兆、几个G,需要设置允许最大文件传输大小。
proxy_set_header
:多个参数设置,为了避免 owncloud 等 docker 容器判断不信任域名访问,将 Nginx 代理访问给排除。
add_header Strict-Transport-Security
:是为了开启 HSTS 。
请参阅: 树莓派/Debian Apache2 实现 HTTPS(SSL) 服务 。
讲了部署 HTTPS 的两种方式:
将生成的 Server 证书和密钥放到你的目标文件夹,在 Nginx 的 /etc/nginx/conf.d/default.conf
文件中设置:
server{
listen 80;
return 301 https://$host$request_uri;
}
server{
listen 443 ssl;
server_name localhost;
# SSL
ssl_certificate /etc/nginx/conf.d/ownSSL/Server/Server_root.crt;
ssl_certificate_key /etc/nginx/conf.d/ownSSL/Server/Server_private.key;
ssl_session_timeout 5m;
ssl_protocols SSLv2 SSLv3 TLSv1;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:sslcache:20m;
location /owncloud/ {
......
}
}
检查配置正确与否:
nginx -t
重载配置文件:
nginx -s reload
然后重启 Nginx 容器即可:
sudo docker-compose restart
要注意,Nginx 的 SSL 设置与 Apache 不同的一点细节:
;
英文分号。原文:https://www.cnblogs.com/Yogile/p/13358013.html