ruby-on-rails 为什么WSL2上的Nginx反向代理不能使用主机名看到Docker容器中的Rails应用程序?

pdsfdshx  于 2023-02-06  发布在  Ruby
关注(0)|答案(1)|浏览(153)

我有几个Rails网站在Docker开发容器中运行。(Ubuntu 20.04)。Nginx在Ubuntu中作为反向代理运行,Windows中的IIS是关闭的。Ubuntu/etc/hosts文件是从Windows中的hosts文件自动填充的。它是这样设置的,因为团队中的其他人在Mac上运行Linux,而我在Rails和之间切换。net开发。
例如,网站mysite1.localhost在Docker的端口8081上公开,并且两个主机文件中都有一个条目"127.0.0.1 mysite1.localhost"。

    • 我遇到的问题是浏览(Windows上的Chrome)localhost:8081从网站返回200,很好,但使用主机名mysite1.localhost返回502 Bad Gateway。**

我假设Nginx不知道Docker或类似的事情?
下面是Nginx的mysite1.conf:

server {
     listen 80;
     listen [::]:80;
     server_name mysite1.localhost;
     
     resolver 127.0.0.1;
     
     location ~* "^/shared-nav" {
         proxy_set_header Accept-Encoding "";
         proxy_pass http://localhost:3000/stuff$is_args$args;
       }
     
     location / {
         ssi on;
         
         ssi_silent_errors off;
         log_subrequest on;
     
         proxy_set_header X-Forwarded-Proto $scheme;
         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://127.0.0.1:8081;
         add_header Cache-Control "no-cache";
     
         if ($request_filename ~* ^.*?/([^/]*?)$) {
           set $filename $1;
         }
         if ($filename ~* ^.*?\.(eot)|(ttf)|(woff)|(woff2)$) {
           add_header Access-Control-Allow-Origin *;
         }
       }
 }

我可以在nginx/error.log中看到两个问题:
2023年2月2日08:50:10 [警告] 2841编号2841:0.0.0.0上的服务器名称"mysite1.localhost"冲突:80,已忽略
2023年2月2日08:50:12 [错误] 2845编号2845:* 52连接()失败(111:连接被拒绝),客户端:::1,服务器:本地主机,请求:"GET/HTTP/1.1",上游:"www.example.com",主机:"mysite1.localhost"http://127.0.0.1:8081/", host: "mysite1.localhost"
Docker是否运行似乎并不重要。
对于冲突的服务器名称警告,我已经尝试寻找需要删除的临时文件,但没有找到任何东西。
我所看到的大多数其他问题都涉及到解决容器化Nginx的问题,因为它位于WSL中。
如果我能更好地解释这个问题,请告诉我,谢谢你的帮助。

vxf3dgd4

vxf3dgd41#

我没有考虑到的一件事是使用VS代码在容器中开发意味着端口被转发到Windows -尽管容器在WSL中运行,VS代码在Windows中运行。
所以,我可以重新打开IIS并将其用作反向代理,或者尝试使用Nginx for Windows。我选择了后者,因为这意味着我可以与Linux的家伙共享相同的配置文件,并将看到它的效果,现在我可以通过主机名浏览网站。
如果其他人需要使用这个设置,我很乐意传授我的经验。

相关问题