【问题标题】:Two proxy servers on NGINX are not working simultaneouslyNGINX 上的两个代理服务器不能同时工作
【发布时间】:2022-11-13 17:12:28
【问题描述】:

我有两台 Nginx 服务器充当在端口 5000 和 5001 上运行的 nodejs 服务器的反向代理。 在端口 5000 上运行的用于普通表单上传 在端口 5001 上运行的另一个用于上传图像 在客户端,我所做的是用户填写表单(标题、描述和图像)后,首先将图像上传到图像服务器,然后将图像URL、标题和描述上传到正常然后是网络服务器。

问题

当客户端填写表格并单击上传时,如果图片上传成功则上传到普通服务器失败,或者如果正常服务器上传成功则上传到图片服务器失败。错误如下:(这可能适用于他们中的任何一个)

从源“https://blogs.vercel.app”访问“https://myserver.com/imagev2api/profile-upload-single”的 XMLHttpRequest 已被 CORS 策略阻止:否“访问控制允许源” ' 请求的资源上存在标头。

笔记:我在两个服务器(图像和普通服务器)上都使用了app.use(cors())

这是两个 nginx 服务器配置

图像服务器

upstream imageserver.com {
        server 127.0.0.1:5001;
        keepalive 600;
}
server {
        server_name imageserver.com;

        error_log /var/www/log/imagserver.com.error;
        access_log /var/www/log/imagserver.com.access;

        location / {
                proxy_pass http://imageserver.com;
                proxy_http_version 1.1;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection 'upgrade';
                proxy_set_header Host $host;
                proxy_cache_bypass $http_upgrade;
            # fastcgi_split_path_info ^(.+\.php)(/.+)$;
        }


      listen 443 ssl http2; # managed by Certbot 
           ssl_certificate /etc/letsencrypt/live/linoxcloud.com/fullchain.pem; # managed by Certbot 
           ssl_certificate_key /etc/letsencrypt/live/linoxcloud.com/privkey.pem; # managed by Certbot 

           ssl_protocols TLSv1.2 TLSv1.3 SSLv2 SSLv3;
          ssl_session_cache shared:SSL:5m;
         ssl_session_timeout  10m;
        ssl_session_tickets off;
}
server {
        if ($host = imageserver.com) {
                return 301 https://$host$request_uri;
    } # managed by Certbot

        listen 80;
        server_name imageserver.com;
 }

普通服务器

upstream normalserver.com {
        server 127.0.0.1:5000;
        keepalive 600;
}

server {
        server_name normalserver.com;

        error_log /var/www/log/normalserver.com.error;
        access_log /var/www/log/normalserver.com.access;

location / {
                proxy_pass http://normalserver.com;
                proxy_http_version 1.1;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection 'upgrade';
                proxy_set_header Host $host;
                proxy_cache_bypass $http_upgrade;
     
        }
     listen 443 ssl http2; # managed by Certbot 
           ssl_certificate ...; # managed by Certbot 
           ssl_certificate_key ...; # managed by Certbot 
           ssl_protocols TLSv1.2 TLSv1.3 SSLv2 SSLv3;
          ssl_session_cache shared:SSL:5m;
         ssl_session_timeout  10m;
        ssl_session_tickets off;
}
server {
        if ($host = normalserver.com) {
                return 301 https://$host$request_uri;
    } # managed by Certbot
        listen 80;
        server_name normalserver.com;
 }

一段时间以来,我一直试图通过尝试一切来克服这个问题。 参考:Two NGINX servers one passing CORS issue(但这并没有提供任何关于问题和解决方案的见解)

请问有什么可能的修复方法吗?

【问题讨论】:

    标签: node.js nginx cors


    【解决方案1】:

    您必须将这些反向代理组合到一个配置文件中。这里已经有一个类似的线程:https://serverfault.com/questions/242679/how-to-run-multiple-nginx-instances-on-different-port

    希望能帮助到你。

    【讨论】:

    • 将它们结合起来,但仍然存在错误!
    • 可能问题不在于 nginx 配置,因为仔细观察它确实从这个站点抱怨:blogs.vercel.app,这是从哪里来的?
    • 你告诉我这是域名错误吗?这只是一个虚拟 url,我的客户端 url 以相同的 .vercel.app 结尾。经过研究,我发现问题与客户端无关。
    • 嗯,也许你可以在这里实现类似的东西:stackoverflow.com/questions/60747209/…
    猜你喜欢
    • 2019-07-27
    • 1970-01-01
    • 2019-11-03
    • 2022-11-10
    • 2012-10-12
    • 1970-01-01
    • 1970-01-01
    • 2017-04-05
    • 2019-06-18
    相关资源
    最近更新 更多