NGINX + Dockerized Gunicorn - 我的 Web 服务器设置的安全性和效率如何?
NGINX + Dockerized Gunicorn - How secure & efficient is my webserver setup?
我正在开发一个需要与服务器通信的 ios 应用程序。作为该通信的一部分,该应用程序会发送一个必须**安全**传输的私人 cookie。
经过大量的研究和挫折,我成功地按照以下方式设置了我的网络服务器:
我的整个设置是 运行 在 AWS EC2 机器上 运行 linux.
我的路由是用 FastAPI 定义的
根据官方 uvicorn 文档的建议,网络服务器部署有 GUNICORN 启动多个 uvicorn worker:
gunicorn -w 4 -k uvicorn.workers.UvicornWorker example:app
Web 服务器使用 docker 容器在端口 8080 上启动:
Dockerfile
... docker setup ...
EXPOSE 8080
CMD ["gunicorn", "-b", "0.0.0.0:8080", "-w", "2", "-k", "uvicorn.workers.UvicornWorker", "main:app"]
- 我的网络服务器在 NGINX 反向代理后面运行。代理侦听端口 80 和 443 并将请求重定向到我的网络服务器(位于端口 8080)。
我的 NGINX .conf 文件非常小,看起来像这样:
server {
server_name example.*;
location / {
proxy_pass http://127.0.0.1:8080/;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
NGINX 使用 certbot 生成的证书仅支持 HTTPS 通信。
证书是使用 python-certbot-nginx 生成的,命令如下:
sudo certbot --nginx -d example.club -d www.example.club
最后,为了确保没有人越过我的 PROXY 直接向我的网络服务器发送请求,我将我的机器配置为只允许从机器的 IP 地址到端口 8080 通信。
端口 80 和端口 443 显然ios对任何 IP 地址开放。
由于我是网络服务器的新手,尤其是网络服务器部署方面的新手,我想知道:
此设置的效率和安全性如何?
你有什么建议或其他我应该实施的东西来确保没有私人数据泄漏,同时还要处理请求负载吗?
谢谢!
在不知道详细的确切配置的情况下,这里有一些事情需要考虑。总而言之,设置似乎是正确的。
I’ve configured my machine to only allow communication to port 8080 from the machine’s IP address.
-> 你真的使用了机器的外部 IP,还是你在那里使用了 localhost/127.0.0.1 值?对于 127.0.0.1 上的代理传递,只允许通过环回适配器进行连接是可以的。
- 我不知道你为nginx 使用的ssl 参数。您可以配置很多。尝试 https://www.ssllabs.com/ssltest/ 看看配置是否足够好。 A++ 或 A+ 几乎是 impos 可以达到的,而无需为您的用户群设置很多限制。但是A绝对是你想要达到的好点。
- 您可能想要为除
certbot
需要的路径之外的所有内容设置 http -> https 转发。然后设置HSTS Header:https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Strict-Transport-Security
希望对您有所帮助。但正如我所说。根本没有那里的安全漏洞。我看到的入口点是你的 nginx、certbot 和你的 dockerized webapp。你必须信任 nginx 和 certbot。您可能想确保自动为ose 安装安全更新,也许unattended-upgrades
不会“忘记”它们。同样适用于 docker,以及来自您的包管理器的所有其他基于 os 的软件。
问候
我正在开发一个需要与服务器通信的 ios 应用程序。作为该通信的一部分,该应用程序会发送一个必须**安全**传输的私人 cookie。
经过大量的研究和挫折,我成功地按照以下方式设置了我的网络服务器:
我的整个设置是 运行 在 AWS EC2 机器上 运行 linux.
我的路由是用 FastAPI 定义的
根据官方 uvicorn 文档的建议,网络服务器部署有 GUNICORN 启动多个 uvicorn worker:
gunicorn -w 4 -k uvicorn.workers.UvicornWorker example:app
Web 服务器使用 docker 容器在端口 8080 上启动:
Dockerfile
... docker setup ...
EXPOSE 8080
CMD ["gunicorn", "-b", "0.0.0.0:8080", "-w", "2", "-k", "uvicorn.workers.UvicornWorker", "main:app"]
- 我的网络服务器在 NGINX 反向代理后面运行。代理侦听端口 80 和 443 并将请求重定向到我的网络服务器(位于端口 8080)。
我的 NGINX .conf 文件非常小,看起来像这样:
server {
server_name example.*;
location / {
proxy_pass http://127.0.0.1:8080/;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
NGINX 使用 certbot 生成的证书仅支持 HTTPS 通信。
证书是使用 python-certbot-nginx 生成的,命令如下:sudo certbot --nginx -d example.club -d www.example.club
最后,为了确保没有人越过我的 PROXY 直接向我的网络服务器发送请求,我将我的机器配置为只允许从机器的 IP 地址到端口 8080 通信。
端口 80 和端口 443 显然ios对任何 IP 地址开放。
由于我是网络服务器的新手,尤其是网络服务器部署方面的新手,我想知道:
此设置的效率和安全性如何?
你有什么建议或其他我应该实施的东西来确保没有私人数据泄漏,同时还要处理请求负载吗?
谢谢!
在不知道详细的确切配置的情况下,这里有一些事情需要考虑。总而言之,设置似乎是正确的。
I’ve configured my machine to only allow communication to port 8080 from the machine’s IP address.
-> 你真的使用了机器的外部 IP,还是你在那里使用了 localhost/127.0.0.1 值?对于 127.0.0.1 上的代理传递,只允许通过环回适配器进行连接是可以的。- 我不知道你为nginx 使用的ssl 参数。您可以配置很多。尝试 https://www.ssllabs.com/ssltest/ 看看配置是否足够好。 A++ 或 A+ 几乎是 impos 可以达到的,而无需为您的用户群设置很多限制。但是A绝对是你想要达到的好点。
- 您可能想要为除
certbot
需要的路径之外的所有内容设置 http -> https 转发。然后设置HSTS Header:https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Strict-Transport-Security
希望对您有所帮助。但正如我所说。根本没有那里的安全漏洞。我看到的入口点是你的 nginx、certbot 和你的 dockerized webapp。你必须信任 nginx 和 certbot。您可能想确保自动为ose 安装安全更新,也许unattended-upgrades
不会“忘记”它们。同样适用于 docker,以及来自您的包管理器的所有其他基于 os 的软件。
问候