masfernandez/nginx-proxy-local-development

轻松管理SSL/TLS证书和代理本地web服务器,快速开发环境设置!

v0.0.1 2020-12-18 00:29 UTC

This package is auto-updated.

Last update: 2024-09-18 08:50:12 UTC


README

Version Contributors Forks Stargazers Issues MIT License LinkedIn


nginx-proxy-local-development

轻松管理SSL/TLS证书和代理本地web服务器,快速开发环境设置!

报告错误 · 请求功能


目录
  1. 关于项目
  2. 入门
  3. 用法
  4. 路线图
  5. 贡献
  6. 许可
  7. 联系方式
  8. 致谢

关于项目

我创建了此仓库以加快本地开发环境的初始配置,允许管理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;
  ...
}

路线图

查看开放问题以获取功能列表(以及已知问题)。

贡献

贡献使开源社区成为一个如此美妙的地方来学习、启发和创造。您所做出的任何贡献都将被强烈赞赏。

  1. 分支项目
  2. 创建您的功能分支(git checkout -b feature/AmazingFeature
  3. 提交您的更改(git commit -m 'Add some AmazingFeature'
  4. 将更改推送到分支(git push origin feature/AmazingFeature
  5. 打开一个Pull Request

许可

在MIT许可下分发。有关更多信息,请参阅LICENSE.txt

联系方式

Miguel Ángel Sánchez Fernández - mangel.sanfer@gmail.com

项目链接:https://github.com/masfernandez/nginx-proxy-local-development

致谢