周梦康 发表于 2015-07-24 13885 次浏览 标签 : Nginx

项目中,一些积分商城的东西,觉得放在 app 里太死,所以我们决定用 web 页面的形式嵌套在 app 里面,后端 api 的接口域名

http://211.131.84.158:5000(这个 web 是直接用 netty 启的5000端口)

现在 web 页面要调用该域,web 页面的服务器我是通过 nginx 配置的8021端口,也就是说 web 域名为

http://211.131.84.158:8021

当我在 web 页里向 api 发送 ajax 请求的时候会提示有跨域请求的问题。


如果是 nginx + php ,从服务端配置允许跨域的http header 头信息,在 nginx 和 php 里配置都可以:

1.在 nginx 里配置 add_header Access-Control-Allow-Origin "http://211.131.84.158:8021"

2.在 php 里配置 header("Access-Control-Allow-Origin:http://211.131.84.158:8021");


我对现在后端的 netty 还不是很熟悉,我想在服务端加一个 header 头描述,也应该可以,没测试,符合 http 协议即可。

下面记录另一种方式通过 nginx 里的proxy_pass来配置。这里正好服务器都是自己的,所以我用下面这种方式。

server
  {
    listen       8021;
    server_name  211.155.84.144 hujia.me;
    index index.html;
    root  /xxx/hujia;

    location /request/ {
		proxy_pass http://192.168.50.14:5000/;
		proxy_redirect off;
		proxy_set_header Host $host;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    access_log /xxx/hujia.access.log access_new;
  }

这样后端哪些接口需要跨域也不用单独配置了。这样 web 页面请求自己当前域名下的request就被转发到内网的 http://192.168.50.14:5000/ 上去了。

需要注意不要出现if (!-e $request_filename)的判断了,否则进入不到上面我们配置的转发区间了。


同时比如,用pdf.js在处理pdf文件的时候,如果 pdf 放在远程服务器上,也会出现跨域请求失败的问题,同样的方式

server {
        listen 80;
        index index.php;
        root /xxxx;

        # 比如本地js读取远程pdf文件的跨域问题
        location  ^~ /pdf/
        {
            proxy_pass https://oss.aliyuncs.com/;
            proxy_redirect off;
            proxy_set_header Host $host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
}


评论列表