新买入一个阿里云服务器,以及一个域名 已经做了域名解析。 二级域名准备了两个 a.xx.com b.xx.com
用 docker 搞了一个 nginx 运行在本地 80 端口 容器内也为 80 端口 其中 a.xx.com 直接指向静态资源,可以访问。 b.xx.com 反向代理到 本地已经运行的 9090 端口 但是一直报 404 使用 b.xx.com 不能访问 报 404 但是使用 b.xx.com:9090 却可以访问。 端口 9090 也已经在阿里云做了 安全组, 本地也打开了防火墙
查看 err.log 报以下错误 *2 connect() failed (111: Connection refused) while connecting to upstream,
百度 google 换了各种关键字 查找了一个星期 网上各种相关的问答基本试过了一遍 但是还是未能解决这个问题
小弟愚钝,初学 ocker 以及 go 服务 望大手帮忙看下问题出在哪里
感谢 下面是 conf.d 配置
server {
listen 80;
#listen [::]:80;
server_name b.xx.com
#charset koi8-r;
#location /(css|js|fonts|img)/ {
# root /usr/web/Html;
# try_files $uri @backend;
#}
location / {
try_files @uri @backend;
}
location @backend{
proxy_redirect off;
#proxy_pass http://backendserver;
proxy_pass http://127.0.0.1:9090;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
1
ackmanfork OP 上周被这个问题搞的掉了 一斤头发 。 跪求 V 站 大佬。
|
2
kebyn 2020-04-26 10:02:40 +08:00
@ackmanfork
proxy_pass http://127.0.0.1:9090; -> proxy_pass http://b.xx.com:9090; docker 内的 127.0.0.1:9090 应该没有这个服务 |
3
ackmanfork OP |
4
ackmanfork OP 大佬们,指点下吧。 (╯﹏╰)
|
5
MisakaTang 2020-04-26 10:29:06 +08:00
试一下配置二级域名的反向代理?
|
6
zdt3476 2020-04-26 10:32:03 +08:00
```
upstream bb.xx.com { server 127.0.0.1:9090; } server { ... proxy_pass http://bb.xx.com; ... } ``` 这样呢? |
7
stille 2020-04-26 10:32:56 +08:00
如果反代强制 https 话用这个试试,自己改下域名和 ssl 路径
upstream dockername { server 172.17.0.1:9090; # 端口改为 docker 容器提供的端口 } server { listen 80; server_name www.yourdomain.com; return 301 https://www.yourdomain.com$request_uri; } server { listen 443 ssl; server_name www.yourdomain.com; gzip on; ssl_certificate /usr/local/nginx/conf/ssl/www.yourdomain.com.crt; ssl_certificate_key /usr/local/nginx/conf/ssl/www.yourdomain.com.key; # access_log /var/log/nginx/dockername_access.log combined; # error_log /var/log/nginx/dockername_error.log; location / { proxy_redirect off; proxy_pass http://dockername; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Ssl on; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Frame-Options SAMEORIGIN; client_max_body_size 100m; client_body_buffer_size 128k; proxy_buffer_size 4k; proxy_buffers 4 32k; proxy_busy_buffers_size 64k; proxy_temp_file_write_size 64k; } } 如果不用 https,用这个. server { listen 80; #listen [::]:80; server_name www.yourdomain.com ; index index.html index.htm index.php default.html default.htm default.php; #root /home/wwwroot/www.yourdomain.com; return 301 https://www.yourdomain.com$request_uri; include enable-php-pathinfo.conf; location / { proxy_redirect off; 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_pass http://172.17.0.1:9090; } location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ { expires 30d; } #location ~ .*\.(js|css)?$ #{ # expires 12h; #} location ~ /.well-known { allow all; } location ~ /\. { deny all; } access_log off; } |
8
stille 2020-04-26 10:34:48 +08:00
反代 IP 127.0.0.1 是 nginx 所在的主机,也就是容器内的本地 IP,你应该用宿主机的内网 IP
|
9
ackmanfork OP @kebyn
@MisakaTang @zdt3476 @stille 谢谢回复, 找到问题。就是很基础的 docker 部署的 nginx, 配置的 127.0.0.1 就是 nginx 所在容器内环境 我换成 本地内 网 ip 可以, 瞬间豁然开朗。可是之前改过一次外网的 ip 没有成功是为什么呢 容器内环境解析不到外网 ip ? 还是得看先看点基础书啊。 再次感谢。 @stille 拜谢。 |
10
xiri 2020-04-26 11:12:38 +08:00
你都用 docker 了为什么不干脆把 go 服务也做成 docker 运行,然后 docker 容器之间用网络桥接
你的 nginx 在 docker 里面的话访问到的 127.0.0.1 是 docker 里面的,然而你的 docker 里面并没有这个服务 |
11
ackmanfork OP @xiri 嗯嗯, 因为 就是新手学 docker 练手的。正好前不久看到 git 有个 go 服务,我就拿来做网站用了 。没有规划那么多
谢谢老哥建议。 接下来 试下你说的网络桥接方式。 |
12
whileFalse 2020-04-26 12:20:36 +08:00
运行 nginx 的时候,docker run 加上 --network=host 这个参数就行了
|