Nginx 容器反向代理和 SSL 配置
前言
本文简记使用 Nginx 容器进行反向代理和 SSL 配置。
Nginx 容器部署
- 请参阅: 运行配置 Nginx 容器 。
反向代理
最简单示例
-
在
server{}
块中的localtion
块:复制
server{ listen 80; server_name localhost; location / { proxy_pass http://192.168.1.110; } }
location 映射规则
优先级
-
排列:
复制
(= 匹配) > (路径匹配) > (开头路径匹配) > (正则匹配) > (通用匹配) > (默认/匹配)
-
示例:
复制
(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 。
-
配置 SSL 证书
-
请参阅: 树莓派/Debian Apache2 实现 HTTPS(SSL) 服务 。
讲了部署 HTTPS 的两种方式:
- 使用第三方 CA 。
- 使用自建 CA 。
-
将生成的 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 不同的一点细节:
- Nginx 的 SSL 设置最后要加
;
英文分号。
- Nginx 的 SSL 设置最后要加
作者:Yogile
出处:https://www.cnblogs.com/Yogile/p/13358013.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构