如何在Apache(或应该是Nginx?)上启用CORS,它作为另一个本地Nginx服务器的代理?

时间:2016-09-22 02:57:13

标签: apache nginx proxy server cors

我在我的机器上安装了两个web服务器,一个是Apache(端口80),它启动了PHP5.3,另一个是Nginx(端口8080),它启动了PHP 7.0。 2。

我让Apache充当Nginx的代理。

我设置了一个Apache的VirtualHost,下面是设置:

<VirtualHost *:80>
    ServerAdmin 369273264@qq.com
    ServerName wxforum.com
    ServerAlias wxforum.com

    Header set Access-Control-Allow-Origin "http://wxforum.com"

    ErrorLog "/private/var/log/apache2/wxforum.com-error_log"
    CustomLog "/private/var/log/apache2/wxforum-access_log" common

    ProxyPass / http://127.0.0.1:8080/
    ProxyPassReverse / http://127.0.0.1:8080/
</VirtualHost>

以下是Nginx的部分设置:

server {

    listen       8080;
    server_name  localhost;
    set $root_path '/usr/local/var/www';
    root $root_path;
    #index  index.php index.html index.htm

    #charset koi8-r;

    access_log  /usr/local/var/log/nginx/localhost.access.log  main;
    error_log  /usr/local/var/log/nginx/localhost.error.log;


    location / {

            index  index.php index.html index.htm;
            try_files $uri $uri/ /index.php$is_args$query_string;
    }


    #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   $root_path;
    }



    # 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  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }

}

现在当我访问http://wxforum.com时,Nginx正常工作,但是当我发出一个AJAX请求时,它失败了,并告诉我:

XMLHttpRequest cannot load http://127.0.0.1:8080/_debugbar/open?op=get&id=9932e2decca12d5f5109a1a61d4ce5dc. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://wxforum.com' is therefore not allowed access.

在这种情况下,我如何在纯Web服务器上启用CORS?

1 个答案:

答案 0 :(得分:0)

我在阅读Using CORSCORS on Nginx后解决了我的问题,它不需要编辑Apache的配置文件,非常感谢!

最后,我的nginx.conf如下所示:

server {
    listen       8080;
    server_name  localhost;

    set $root_path '/usr/local/var/www';
    root $root_path;

    #charset koi8-r;

    access_log  /usr/local/var/log/nginx/localhost.access.log  main;
    error_log  /usr/local/var/log/nginx/localhost.error.log;    
    index  index.php index.html index.htm;


    # enable CORS
    # http://www.html5rocks.com/en/tutorials/cors/#toc-cors-server-flowchart
    # http://enable-cors.org/server_nginx.html
    # http://stackoverflow.com/questions/14499320/how-to-properly-setup-nginx-access-control-allow-origin-into-response-header-bas/29113949#29113949
    set $allow_origin 'http://wxforum.com';

    add_header 'Access-Control-Allow-Origin' $allow_origin;
    add_header 'Access-Control-Allow-Methods' 'GET, POST';
    add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';


    location / {
        # add_header Access-Control-Allow-Origin $cors_header;
        try_files $uri $uri/ /index.php$is_args$query_string;
    }
    ...
}