# dc-nginx **Repository Path**: badashou/dc-nginx ## Basic Information - **Project Name**: dc-nginx - **Description**: No description available - **Primary Language**: Docker - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-12-09 - **Last Updated**: 2025-07-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README [toc] # nginx 此服务做代理,可以用此服务做到内外网隔离 ## 文件说明 - .env: 容器的配置文件,可以修改,里面有以下重要参数 - image: docker 镜像 - 其它及详情参数文件中有注释 - docker-compose.yaml: docker 容器编排文件,增加端口映射到这个文件增加 - init.sh: 初始化运行环境文件,此文件不用修改 - conf_template: 此文件夹下一些配置模板 - http_template.conf: 代理 http 服务模板 - stream_template.conf: 代理流式服务模板 - ssl_template.conf: https 的 ssl 证书配置模板 - share: 与容器共享目录,在执行完 init.sh 脚本后会生成 - conf: nginx 的配置目录 - nginx.conf: nginx 主配置文件,所有配置由这里开始 - conf.d/proxy_pass: http 服务的配置文件目录, 将配置好的文件放到这里就好了 - stream: 流式服务配置文件目录,将配置好的文件放到这里就好了 - certificate: ssl 证书的存放目录,使用时创建一个与域名相同名称的目录,把证书文件放入目录 ## 部署容器 nginx 容器使用时要注意: 1. 使用 nginx 代理的容器最好要指定 ip 1. 然后要 nginx 的 docker-compose.yaml 中, 添加 .extra_hosts 配置(当然也可以直接使用 id, 那这步以后的都不用管了), 不然的话,如果代理的容器没有启动的话, nginx 容器也启动不了 部署说明 当前目录后运行下面命令 ```bash sh init.sh ``` 执行完后,再目录下会生成当前 nginx 版本的一些目录和文件, 这里候就可以修改配置 再修改好配置后,执行下面命令启动容器 ```bash docker compose up -d ``` ## 一些常用的配置 ### 代理 http 服务, 示例 修改 conf/nginx.conf 文件, 在 http 的配置中增加一行配置 ```nginx include /etc/nginx/proxy_pass/*.conf; ``` 创建配置文件 conf/proxy_pass/pic.external.net.conf ```nginx upstream cheveretoHost { # 可以配置多行,来实现多服务负载 server chevereto:80; # chevereto 是容器名称(在同一网络下可用), 这里也可以用域名或ip, } server { listen 80; server_name pic.pro.esxi; client_max_body_size 3m; location / { proxy_pass http://cheveretoHost; proxy_set_header Host $host:$server_port; proxy_set_header X-Forwarded-Proto $scheme; } } server { listen 12345 ssl; server_name pic.external.net; # 替换自己的外网域名 client_max_body_size 3m; location / { proxy_pass http://cheveretoHost; proxy_set_header Host $host:$server_port; # proxy_set_header X-Real-IP $remote_addr; # proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # add_header Cache-Control no-store; # proxy_redirect http:// https://; proxy_set_header X-Forwarded-Proto $scheme; } } ``` ### 代理 mysql 接连, 示例 修改 conf/nginx.conf 文件, 在最后增加下面内容, 这里我只允许内网访问 ```nginx stream { # 只允许内网访问 allow 10.0.0.0/8; allow 172.16.0.0/12; allow 192.168.0.0/16; deny all; # 使用 Docker 内置的 DNS 缓存 300 秒 resolver 127.0.0.11 valid=300s; include /etc/nginx/stream/*.conf; } ``` 创建配置文件 conf/stream/mysql.conf, 写入以下内容 ```nginx upstream mysqldHost { # 可以配置多行,来实现多服务负载 server mysqld:3306; # mysqld 是容器名称(在同一网络下可用), 这里也可以用域名或ip, } server { listen 3306; proxy_pass mysqldHost; proxy_connect_timeout 10s; # 连接超时 proxy_timeout 300s; # 设置客户端和代理服务之间的超时时间,如果5分钟内没操作将自动断开 } ``` ### 启用配置 验证,正确了可以启用配置 ```shell docker compose exec -it nginx bash -c 'nginx -t' ``` 以下两条命令二选一,进行启用新配置 - 重载配置 ```shell docker compose exec -it nginx 'nginx reload' ``` - 重启容器 ```shell docker compose restart nginx ```