nginx 反向代理简单配置不重定向
nginx reverse-proxy simple config not redirecting
为了使用 docker 掌握 nginx 的窍门,我有一个非常简单的 nginx.conf
文件 + docker-compose
,运行 2 个容器用于 1 个服务(服务本身 +分贝).
我想要什么:
localhost
--> 显示静态页面
localhost/pics
--> 显示另一个静态页面
localhost/wekan
--> 重定向到我的容器,它在端口 3001 上 运行。
最后一部分(重定向到 docker-container)不起作用。可以在 localhost:3001
下访问该应用程序。
我的nginx.conf:
user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;
events {
worker_connections 768;
# multi_accept on;
}
http {
server{
listen 80;
location / {
root /home/user/serverTest/up1; #index.html is here
}
location /wekan {
proxy_pass http://localhost:3001;
rewrite ^/wekan(.*)$ break; # this didnt help either
}
location /pics {
proxy_pass http://localhost/example.jpg;
}
location ~ \.(gif|jpg|png)$ {
root /home/user/serverTest/data/images;
}
}
docker-compose.yml:
version: '2'
services:
wekandb:
image: mongo:3.2.21
container_name: wekan-db
restart: always
command: mongod --smallfiles --oplogSize 128
networks:
- wekan-tier
expose:
- 27017
volumes:
- /home/user/wekan/wekan-db:/data/db
- /home/user/wekan/wekan-db-dump:/dump
wekan:
image: quay.io/wekan/wekan
container_name: wekan-app
restart: always
networks:
- wekan-tier
ports:
# Docker outsideport:insideport
- 127.0.0.1:3001:8080
environment:
- MONGO_URL=mongodb://wekandb:27017/wekan
- ROOT_URL=http://localhost
查看 nginx 错误日志,我明白了:
2018/12/17 11:57:16 [error] 9060#9060: *124 open() "/home/user/serverTest/up1/31fb090e9e6464a4d62d3588afc742d2e11dc1f6.js" failed (2: No such file or directory),
client: 127.0.0.1, server: ,
request: "GET /31fb090e9e6464a4d62d3588afc742d2e11dc1f6.js?meteor_js_resource=true HTTP/1.1", host: "localhost",
referrer: "http://localhost/wekan"
所以我想这是有道理的,因为根据我的理解,nginx 现在正在将重定向添加到给定 @/ 的根目录,但显然这不是容器所在的位置 运行。
我该如何预防?
您的 nginx 无法访问您 docker 组合的本地网络接口。
尝试像这样绑定 wekan
的端口:
wekan:
ports:
- 127.0.0.1:3001:8080
注意127.0.0.1
问题出在 docker-compose
配置中。
对于任何想知道的人,您只需要代理传递 addr:port
或 addr:port/
而第二个选项与重写部分的作用相同,因此可以跳过。
除此之外,我必须将 /wekan 添加到我的 docker-compose
中的 ROOT_URL
为了使用 docker 掌握 nginx 的窍门,我有一个非常简单的 nginx.conf
文件 + docker-compose
,运行 2 个容器用于 1 个服务(服务本身 +分贝).
我想要什么:
localhost
--> 显示静态页面
localhost/pics
--> 显示另一个静态页面
localhost/wekan
--> 重定向到我的容器,它在端口 3001 上 运行。
最后一部分(重定向到 docker-container)不起作用。可以在 localhost:3001
下访问该应用程序。
我的nginx.conf:
user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;
events {
worker_connections 768;
# multi_accept on;
}
http {
server{
listen 80;
location / {
root /home/user/serverTest/up1; #index.html is here
}
location /wekan {
proxy_pass http://localhost:3001;
rewrite ^/wekan(.*)$ break; # this didnt help either
}
location /pics {
proxy_pass http://localhost/example.jpg;
}
location ~ \.(gif|jpg|png)$ {
root /home/user/serverTest/data/images;
}
}
docker-compose.yml:
version: '2'
services:
wekandb:
image: mongo:3.2.21
container_name: wekan-db
restart: always
command: mongod --smallfiles --oplogSize 128
networks:
- wekan-tier
expose:
- 27017
volumes:
- /home/user/wekan/wekan-db:/data/db
- /home/user/wekan/wekan-db-dump:/dump
wekan:
image: quay.io/wekan/wekan
container_name: wekan-app
restart: always
networks:
- wekan-tier
ports:
# Docker outsideport:insideport
- 127.0.0.1:3001:8080
environment:
- MONGO_URL=mongodb://wekandb:27017/wekan
- ROOT_URL=http://localhost
查看 nginx 错误日志,我明白了:
2018/12/17 11:57:16 [error] 9060#9060: *124 open() "/home/user/serverTest/up1/31fb090e9e6464a4d62d3588afc742d2e11dc1f6.js" failed (2: No such file or directory),
client: 127.0.0.1, server: ,
request: "GET /31fb090e9e6464a4d62d3588afc742d2e11dc1f6.js?meteor_js_resource=true HTTP/1.1", host: "localhost",
referrer: "http://localhost/wekan"
所以我想这是有道理的,因为根据我的理解,nginx 现在正在将重定向添加到给定 @/ 的根目录,但显然这不是容器所在的位置 运行。
我该如何预防?
您的 nginx 无法访问您 docker 组合的本地网络接口。
尝试像这样绑定 wekan
的端口:
wekan:
ports:
- 127.0.0.1:3001:8080
注意127.0.0.1
问题出在 docker-compose
配置中。
对于任何想知道的人,您只需要代理传递 addr:port
或 addr:port/
而第二个选项与重写部分的作用相同,因此可以跳过。
除此之外,我必须将 /wekan 添加到我的 docker-compose
ROOT_URL