在实际项目过程中,由于网站要用到一个在线编辑器(个性化的在线编辑软件),需要跨域进行通信!由于跨域通信较多,所以当时就想到在网站服务器上代理编辑软件的请求!
这就是“反向代理”的实际需求!
一、Nginx上配置反向代理
location /edit/ {
proxy_pass http://edit.host.net/;
#Proxy Settings
proxy_redirect off;
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_set_header Accept-Encoding "";
proxy_set_header X-NginX-Proxy true;
proxy_http_version 1.1;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
proxy_max_temp_file_size 0;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffering off;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
}
在实际配置过程中,发现在线编辑软件的静态资源文件加载不进来(比如css、js、图片等),后来发现编辑器静态资源的链接都是用的相对路径!当时认为是路径问题,就在
proxy_pass 的域名后面加了“/”,目的是从根路径下引用资源文件!但是测试后发现还是存在一样的问题!最后各种尝试后,发现是以下几行配置文件:
location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$ { expires 30d; } location ~ .*.(js|css)?$ { expires 1h; }
就是上面的几行配置影响了静态资源的代理路径,导致静态资源加载不到(404错误)!
二、Apache上配置反向代理
在Apache配置反向代理相对比较简单了,直接贴配置代码:
<VirtualHost *:80> DocumentRoot "D:phpStudyWWWgit ecshop" ServerName http://local.shop.tuwen.com ServerAlias ProxyRequests On RewriteEngine off <Proxy *> Order deny,allow Allow from all </Proxy> ProxyPass /edit http://edit.host.net/ ProxyPassReverse /edit http://edit.host.net/ <Directory "D:phpStudyWWWgit ecshop"> Options FollowSymLinks ExecCGI AllowOverride All Order allow,deny Allow from all Require all granted </Directory> </VirtualHost>
当然,对应服务器支持反向代理的模块需要开启哦!这个一定不要忘记了!