ngnix 利用proxy_pass 后端接口跳转第三方地址接口,前端页面访问出现跨域、404问题

1、前端地址:a.aaa.com
2、后端接口:b.aaa.com   请求转发:b.ccc.com

server {
    listen       80;
    listen       443 ssl;
    server_name  b.aaa.com;
    
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    
    ssl_session_cache    shared:SSL:1m;
    ssl_session_timeout  5m;

    ssl_ciphers  ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_prefer_server_ciphers  on;
    
        
    # gzip config
    gzip on;
    gzip_min_length 1k;
    gzip_comp_level 9;
    gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
    gzip_vary on;
    gzip_disable "MSIE [1-6]\.";
    
    #charset koi8-r;

    #access_log  logs/host.access.log  main;

    location / {
        
        # Begin以下跨域解决问题:proxy_pass The 'Access-Control-Allow-Origin' header contains multiple values
        
        proxy_hide_header Access-Control-Allow-Origin;
        proxy_hide_header Access-Control-Allow-Methods;
        proxy_hide_header Access-Control-Allow-Headers;
        proxy_hide_header Access-Control-Allow-Credentials;
        
        # End跨域解决问题

        add_header Access-Control-Allow-Origin 'https://a.aaa.com';
        add_header Access-Control-Allow-Headers 'x-token,content-type,x-sys-id';# 必须带自定义头
        add_header Access-Control-Allow-Methods '*';
        add_header Access-Control-Allow-Credentials 'true';
        add_header Access-Control-Max-Age 3600;
        
        # 单独处理 `OPTIONS` 预检请求,直接返回 204
        if ($request_method = 'OPTIONS') {
            return 204;
        }

        proxy_pass http://b.ccc.com/;

        proxy_set_header   X-Forwarded-Proto $scheme;
        proxy_set_header   X-Real-IP         $remote_addr;
        proxy_set_header   Host              $proxy_host;# 不能$host,否则会返回404
        proxy_set_header   X-Forwarded-For   $proxy_add_x_forwarded_for;
        proxy_set_header   REMOTE-HOST       $remote_addr;
    }

    #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   html;
    }

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}

 

posted @ 2026-08-28 16:03  94cool  阅读(3)  评论(0)    收藏  举报