masfernandez / nginx-proxy-local-development
轻松管理SSL/TLS证书和代理本地web服务器,快速开发环境设置!
This package is auto-updated.
Last update: 2024-09-18 08:50:12 UTC
README
nginx-proxy-local-development
轻松管理SSL/TLS证书和代理本地web服务器,快速开发环境设置!
报告错误 · 请求功能
关于项目
我创建了此仓库以加快本地开发环境的初始配置,允许管理SSL/TLS证书和本地web服务器。
特性
- 在反向代理服务器后端支持多个不同端口的本地web服务器。
- 在SSL/TLS下运行本地应用程序(例如,使用serviceworker或Vue在SSL/TLS下开发PWA)。
- 浏览器、curl和其他应用程序的100%可信证书。
结合xip.io等服务(请在此处阅读有关xip.io的文档:http://xip.io),还可以
- 不再需要编辑/etc/hosts文件
- 从外部主机开发并测试多个本地应用程序(web服务器),无需复杂的配置
- Ngrok、Serveo等免费替代品(需要在路由器上进行一些NAT配置)
入门
本文件中显示的设置在macOS环境中有效,因为使用了"host.docker.internal"变量来映射代理容器的主机IP。此变量在Windows或Linux上不工作。
包含内容的过期日期
- 认证机构:2023年10月3日20:00:11 CEST
- 通配符xip.io证书:2021年12月13日19:22:47 CEST
先决条件
- docker
- openssl(仅用于自定义CA或证书)
- composer(当用作composer依赖项时,显然)
安装
作为独立工具
git clone https://github.com/masfernandez/nginx-proxy-local-development.git
作为composer依赖项
composer req --dev masfernandez/nginx-proxy-local-development:dev-master
用法
适用于通过https://<任何域名>.127.0.0.1.xip.io访问位于127.0.0.1:<任何端口>(您的计算机)的本地web服务器的url域
在xip.io服务上选择任何子域名来访问您伟大的应用(如backend.127.0.0.1.xip.io)。
简而言之,该子域名将解析到您的本地计算机,无需编辑/etc/hosts文件。您现在可以检查它了
ping backend.127.0.0.1.xip.io
如果您更喜欢使用自己的自定义SLD,如my-cool-app.com而不是<任何域名>.xip.io,您也可以使用此仓库生成自己的自定义CA和证书。这种方式的主要缺点是您必须通过编辑/etc/hosts文件将my-cool-app.com指向127.0.0.1 IP。选择这种方式,我建议使用Gas Mask。
作为独立工具的快速使用
根据您的需求配置docker/nginx/conf.d/backend.127.0.0.1.xip.io.conf中的Nginx vhost示例。
该vhost示例使用
- 子域名:backend.127.0.0.1.xip.io
- 在127.0.0.1:8080上运行的本地web服务器
- 从backend.127.0.0.1.xip.io到127.0.0.1:8080的Nginx代理
upstream backend {
server host.docker.internal:8080; # <- override here the port your app is using
}
server {
server_name backend.127.0.0.1.xip.io; # <- override here the subdomain your app is using
listen 443 ssl http2 ;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:!DSS';
ssl_prefer_server_ciphers on;
ssl_session_timeout 5m;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;
ssl_certificate /etc/nginx/certs/wildcard.127.0.0.1.xip.io.crt; # <- Check this out
ssl_certificate_key /etc/nginx/certs/wildcard.127.0.0.1.xip.io.key; # <- Check this out
ssl_client_certificate /etc/nginx/ca/masfernandez.crt; # <- Check this out
add_header Strict-Transport-Security "max-age=31536000" always;
location / {
proxy_pass http://backend;
proxy_http_version 1.1;
proxy_redirect off;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
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 X-Forwarded-Host $server_name;
}
}
构建和运行Docker容器
docker-compose up -d
就这样!您可以在https://backend.127.0.0.1.xip.io访问您的本地应用程序。
享受开发过程 :)
作为composer依赖项的快速使用
在项目的根目录下创建一个docker-compose.yml文件,或者将以下服务集成到您现有的堆栈中
proxy:
image: nginx:latest
ports:
- "443:443"
volumes:
- ./vendor/masfernandez/nginx-proxy-local-development/ca:/etc/nginx/ca:ro
- ./vendor/masfernandez/nginx-proxy-local-development/certs/wildcard.127.0.0.1.xip.io:/etc/nginx/certs:ro
- ./vendor/masfernandez/nginx-proxy-local-development/docker/nginx/conf.d:/etc/nginx/conf.d:ro
以下为参考的完整docker-compose.yml文件示例
cat vendor/masfernandez/nginx-proxy-local-development/docker-compose-example-proxy.yml
构建和运行Docker容器
docker-compose up -d
就这样!您可以在https://backend.127.0.0.1.xip.io访问您的本地应用程序。
享受开发过程 :)
其他配置和自定义
如果您想生成自己的CA、自定义证书或高级配置,请阅读以下部分。
在容器中运行的本地Web服务器
当您在docker容器中的本地Web服务器上运行应用程序时,已经有了一个很好的工具来作为代理并正确地访问每个服务。看看
https://github.com/nginx-proxy/nginx-proxy
此外,您还可以将nginx-proxy/nginx-proxy与masfernandez/nginx-proxy-local-development结合使用
- nginx-proxy/nginx-proxy作为反向代理服务器,用于docker中的本地Web服务器
- masfernandez/nginx-proxy-local-development用于在开发中生成自定义可信的ssl/tls证书
创建并安装您的自定义证书颁发机构
./gen-ca.sh
它将要求输入sudo密码,在macOS密钥链中安装以避免应用程序(浏览器、curl等)抱怨“它是自签名的或未经验证”
Firefox浏览器需要手动安装。
生成单域名证书
./gen-cert.sh <domain>.<IP>.xip.io
示例
./gen-cert.sh my-new-site.127.0.0.1.xip.io
./gen-cert.sh my-new-site.192.168.1.10.xip.io
如果您不希望使用xip.io,仍然可以生成用于本地开发的自定义可信证书
./gen-cert.sh my-new-site.com
生成通配符证书
./gen-cert.sh wildcard.<IP>.xip.io
示例
./gen-cert.sh wildcard.127.0.0.1.xip.io
./gen-cert.sh wildcard.192.168.1.10.xip.io
如果您不希望使用xip.io,仍然可以生成用于本地开发的自定义通配符可信证书
./gen-cert.sh wildcard.my-new-site.com
适用于web.my-new-site.com、backend.my-new-site.com等域
错误的通配符证书
./gen-cert.sh wildcard.xip.io
实际上根本没错,但这个通配符深度的配置是为了将主机IP解析为xip.io DNS上的,例如192.168.1.10.xip.io将在您的本地网络上解析为192.168.1.1 IP。
使用上述通配符证书,您必须在您的网络上的不同IP上运行每个Web服务器。我们希望所有Web服务器都在localhost上供开发使用。
解释见此处:Stackoverflow
验证证书
openssl verify -CAfile ca/<your ca>.crt certs/<your domain at xip.io>/cert.crt
示例
openssl verify -CAfile ca/masfernandez.crt certs/wildcard.127.0.0.1.xip.io/cert.crt
基本的Nginx配置
配置Nginx以使用前面步骤中生成的文件。示例
server {
...
ssl_certificate /path/to/certs/<your-domain>/cert.crt;
ssl_certificate_key /path/to/certs/<your-domain>/privkey.key;
ssl_client_certificate /path/to/your/ca/<your-ca>.crt;
...
}
路线图
查看开放问题以获取功能列表(以及已知问题)。
贡献
贡献使开源社区成为一个如此美妙的地方来学习、启发和创造。您所做出的任何贡献都将被强烈赞赏。
- 分支项目
- 创建您的功能分支(
git checkout -b feature/AmazingFeature
) - 提交您的更改(
git commit -m 'Add some AmazingFeature'
) - 将更改推送到分支(
git push origin feature/AmazingFeature
) - 打开一个Pull Request
许可
在MIT许可下分发。有关更多信息,请参阅LICENSE.txt
。
联系方式
Miguel Ángel Sánchez Fernández - mangel.sanfer@gmail.com
项目链接:https://github.com/masfernandez/nginx-proxy-local-development