我正在使用 NGINX 代理对一些网站进行 docker 化。我正在从 Apache 设置迁移,并且是 NGINX 新手。据我所知,我应该使用 NGINX 代理来访问 Web 服务器。我希望一切都通过 SSL 进行,并且所有非 SSL 请求都重定向到 HTTPS。
代理后面的私人网站是否应该通过普通 HTTP 端口 80 与代理通信?这是否仍然完全加密?仅供参考,是否可以从 NGINX 代理代理到 apache 网站?
答案1
您必须将 SSL 证书安装到 Nginx(您的客户端将直接与其通信),并定义 80 端口服务器,然后将其重定向到 443。以下是此类设置的示例配置:
upstream APP {
server CONTAINER:PORT;
}
// Redirect 80 to 443
server {
listen 80 default_server;
server_name yourdomain.com;
return 301 https://www.yourdomain.com$request_uri;
}
server {
listen 443 ssl default_server;
server_name yourdomain.com;
ssl on;
ssl_certificate /etc/nginx/ssl/server.crt;
ssl_certificate_key /etc/nginx/ssl/server.key;
// Rest of your configuration is all up to your architecture
location / {
// more config...
proxy_pass APP;
// more config...
}
}
我不知道你的 docker 容器上有哪些应用程序。
例如,如果你有一个 PHP 应用程序。你可以使用 PHP-FPM 并完全删除其间的 Apache。Nginx 可以通过 fast-cgi 与你的容器一起工作。可以有数百种不同的设置取决于您的需求和负载等。
Nginx 是高度可配置的 Web 服务器 + 代理服务器。但请记住,如果您的 DNS 记录指向 Nginx IP 地址,则必须在其上安装 SSL。如果您的容器无法从 Web 访问(这是一种很好的安全做法),则无需加密 nginx 和容器之间的流量,从而节省 CPU 功耗
此外,nginx 具有强大的代理/fastcgi 缓存功能,因此您可以缓存应用程序的输出(如果它们不是每个请求的动态输出,例如静态文件)
自 2018 年 4 月 25 日星期三 14:57:24 起,该ssl on;
指令已弃用。您可以将其注释掉。详情:http://hg.nginx.org/nginx/rev/46c0c7ef4913