如何解决使用 NGINX 创建反向代理我错过了什么?
帮助调试
我一直在尝试使用 Nginx 创建反向代理。现在我只是想让它重定向我本地网络上的流量。我想我很接近,但我被卡住了。任何建议表示赞赏!
预期行为是对 http://api.dev.tagnoo.com
的请求将流量路由到一个容器,而对 http://app.dev.tagnoo.com
的请求路由到另一个容器。
实际行为是,尽管我的容器正在运行并且 Nginx 似乎正在运行,但我无法访问任何内容。我不知道如何调试。
重现我的痛苦
我使用以下命令启动容器:
docker-compose pull --include-deps $@
docker-compose up -d --remove-orphans --build $@
我的 docker-compose.yaml 文件是这样的
services:
lb:
image: Nginx:1.19.7-alpine
ports:
- 80:80
- 443:443
volumes:
- ./src/Nginx.conf:/etc/Nginx/Nginx.conf
- ./src/fullchain.pem:/etc/ssl/private/fullchain.pem
- ./src/privkey.pem:/etc/ssl/private/privkey.pem
networks:
default:
aliases:
- api.dev.tagnoo.com
- app.dev.tagnoo.com
- dev.tagnoo.com
postgres:
image: postgres:13.3-alpine
environment:
POSTGRES_PASSWORD: postgres
ports:
- 5432:5432
volumes:
- pg-data:/var/lib/postgresql/data
api: &api
image: 410ventures/tagnoo-api:latest
environment: &api_environment
TEST_VAR: 'test123'
VERSION: development
WATCH: 1
api-test:
<<: *api
command: ["true"]
environment:
<<: *api_environment
TAGNOO_API_URL: http://localhost
POSTGRES_URL: pg://postgres:postgres@postgres/tagnooTest
REdis_KEY_PREFIX: 'api-test:'
api-app-test:
<<: *api
command: ["true"]
environment:
<<: *api_environment
TAGNOO_API_URL: http://api-app-test
POSTGRES_URL: pg://postgres:postgres@postgres/tagnooAppTest
WATCH: 1
app: &app
image: 410ventures/tagnoo-app:latest
environment: &app_environment
VERSION: development
WATCH: 1
app-build:
<<: *app
command: ["true"]
app-livereload:
<<: *app
command: ["true"]
app-test:
<<: *app
command: ["true"]
environment:
<<: *app_environment
TAGNOO_APP_URL: http://localhost
TAGNOO_API_URL: http://api-app-test
volumes:
pg-data:
这按预期工作: container info
events {}
http { server_tokens off;
map $http_upgrade $connection_upgrade {
'' close;
default upgrade; }
proxy_http_version 1.1; proxy_set_header Connection $connection_upgrade; proxy_set_header Host $host; proxy_set_header Upgrade $http_upgrade; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Real-IP $remote_addr;
ssl_certificate /etc/ssl/private/fullchain.pem; ssl_certificate_key /etc/ssl/private/privkey.pem;
proxy_read_timeout 24h;
# proxy_pass directives are passed hosts via a $proxy_pass_host variable to # allow Nginx to start up before the hosts are actually available. Putting the # hosts directly in the proxy_pass directive will fail start up unless all # hosts are available. A resolver is required to use variables in proxy_pass # directives,so use the docker internal DNS IP here. resolver 127.0.0.11;
server {
return 301 https://$host$request_uri; }
server {
listen 443 ssl http2;
server_name app.dev.tagnoo.com;
location /livereload {
set $proxy_pass_host app-livereload:35729;
proxy_pass http://$proxy_pass_host;
}
location / {
set $proxy_pass_host app;
proxy_pass http://$proxy_pass_host;
} }
server {
listen 443 ssl http2;
server_name api.dev.tagnoo.com;
location / {
set $proxy_pass_host api;
proxy_pass http://$proxy_pass_host;
} } }
我的根目录中有 privkey.pem
和 fullchain.pem
文件。我只是使用 openssl
对它们进行了自签名,但我认为如果我忽略 ssl,它仍然适用于我的本地网络。
我的尝试
我尝试通过以下方式访问容器(无济于事):
- http://api.dev.tagnoo.com
- https://api.dev.tagnoo.com/healthz(我用来测试连接的端点)
- https://api.dev.tagnoo.com
- 本地主机:80
- 0.0.0.0:80
这是我得到的响应的日志(没有特定的顺序) docker compose logs for lb
我还没有为我的域 tagnoo.com
设置任何 DNS 记录,但我认为这无关紧要,因为目前这只是一个本地环境。但我不确定这是不是真的。
目前我找不到有关调试 Nginx 的更多信息。
总结
我主要担心我的 Nginx 配置文件没有做它应该做的。我也不确定我的 docker-compose 文件是否为反向代理正确设置。
我的容器正在运行,但它们的反向代理不知何故损坏了。每当我尝试访问时,请求都会以 302
或 301 getaddrinfo ENOTFOUND api.dev.tagnoo.com
失败。
以下是我对此事的一些问题:
- 我还需要做些什么来设置这个反向代理吗?我错过了一步吗?
-
fullchain.pem
和privkey.pem
文件是 Nginx 失败的原因吗?如果是这样 - 我该如何创建这些? - docker-compose 配置是否正确?
- 如何进一步调试?
任何建议/提示将不胜感激!
解决方法
问题是我还没有设置 A 和 AAAA 记录来将 *.dev 子域解析为 localhost。我添加了这些并为主机创建了一个有效的(非自签名)证书。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。