需求想的是,在访问 test.cc/sss 的时候转到 http://localhost:8001 地址
其中:
报错信息
2020/11/25 13:43:56 [error] 7#7: *3 connect() failed (111: Connection refused) while connecting to upstream, client: 172.19.0.1, server: test.cc, request: "GET /sss/list HTTP/1.1", upstream: "http://127.0.0.1:8001/sss/list", host: "test.cc"
nginx.conf
upstream websocket {
ip_hash;
server 127.0.0.1:3101 weight=1 max_fails=2 fail_timeout=30s;
server 127.0.0.1:3102 weight=1 max_fails=2 fail_timeout=30s;
server 127.0.0.1:3103 weight=1 max_fails=2 fail_timeout=30s;
}
server {
listen 80;
server_name test.cc;
location ~ /sss/ {
proxy_pass http://localhost:8001;
}
}
1
lrvinye 2020-11-25 23:40:45 +08:00 via iPhone
你这个写法,访问 test.cc/sss 实际上会反代到 localist:8001/sss
|
2
kidlj 2020-11-26 00:09:21 +08:00 via iPhone
SELinux 关掉了吗?
# sestatus 查看。 |
4
37Y37 2020-11-26 08:15:34 +08:00
server 段还有其他 location 规则干扰了吧
|
5
ik 2020-11-26 08:15:59 +08:00 via iPhone
关闭 selinux
location ~ /sss/ 改成 location ~ /sss |
7
uselessVisitor 2020-11-26 08:27:02 +08:00
建议使用二级域名。。
|
8
uselessVisitor 2020-11-26 08:29:32 +08:00
或者这样试试
location ^~/sss/ { rewrite ^/sss/(.*)$ /$1 break; proxy_pass http://127.0.0.1:8081; } |
9
zliea 2020-11-26 08:47:06 +08:00
偷偷的问是不是 docker
|
10
todd7zhang 2020-11-26 08:54:02 +08:00
如果是 Django 的话,可以尝试看看是不是 ALLOWED_HOSTS 的问题
|
11
Kirsk 2020-11-26 09:24:42 +08:00 via Android
看一楼回复 location /sss/ {
proxy_pass http://localhost:8001 |
13
qwer666df OP @ztechstack #9 对是 docket
@lrvinye #1 但是我本地 hosts 里面 localhost 也指向到了 127.0.0.1 @lpts007 #3 8001 端口能直接访问没啥问题的 |
15
zliea 2020-11-26 12:27:18 +08:00
docker 的话,nginx 容器内部访问 127.0.0.1 是访问 nginx 容器自身;
如果需要访问 python 容器的话: 1. 在同一 docker 的 network 里,可以使用[python 容器名称]:[python 服务端口]。 2. 或者使用[宿主机 IP]:[python 容器映射宿主机端口]。 |
17
qwer666df OP @ztechstack #15 对, 我早上发现了, 也就是访问 nginx 的去了, 不是我的本机, 所以一直链接不上, 你说的这个方案.. 我还不太熟悉, 打算先看看 docker 在研究研究... 蛋疼
|
18
ziwen1943 2020-11-26 17:38:58 +08:00
这个问题大概率是 docker 引起的,如果使用 docker 的话,nginx 容器代理应该代理 python 容器名( docker 子网访问使用容器名,加对应端口,127.0.0.1 只是在 nginx 本容器内访问,)
一个简单的方法是,先用 python 的 debug 方法直接监听 0.0.0.0 ( ALLOW_HOST ),测试通过后再加 nginx 代理,而且这样代理还不行,应该把 python 容器的 Django 项目静态文件通过映射传递或者容器继承文件,让 nginx 来代理所有静态文件和 api,django 真正变成后端,不负责静态文件的路由和转发,django 的效率更高。 |