Apache虚拟目录以及反向代理相关设置
前端Apache,后端Tomcat,为了最大化效率,特使用本方法。动态文件通过反向代理至后端,静态文件(图片/CSS/JS)通过虚拟目录。
一、关于虚拟目录的四个点:
1、核心语句
Alias /statics /www/tomcat/webapps/WeChat/statics/
2、目录访问设定(注意:Apache2.2和Apache2.4该配置有差异)
<Directory /www/tomcat/webapps/WeChat/statics> Options Indexes FollowSymLinks AllowOverride All Require all granted </Directory>
3、目录锁定(如果有的话,如果有php_admin_value open_basedir的话,要加入虚拟目录的实际路径)
php_admin_value open_basedir /www/web/xcwl_com:/tmp:/www/tomcat/webapps/WeChat/statics
4、目录权限
/www/tomcat/webapps/WeChat/statics目录,Apache Web访问要能访问到。目录权限不足时,一般有以下错误提示:
Permission denied: access to /xxxxx denied (filesystem path '/xxxxxx') because search permissions are missing on a component of the path
具体的,可以查看Apache站点的错误日志
二、反向代理的两个点:
1、加载反向代理模块
LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_http_module modules/mod_proxy_http.so
可以在httpd.conf中去掉注释,也可以在虚拟化文件中加载。
2、反向代理配置
<IfModule mod_proxy.c> ProxyRequests Off ProxyPass /statics/ ! ProxyPass / http://localhost:8080/WeChat/ ProxyPassReverse / http://localhost:8080/WeChat/ </IfModule>
“ProxyPass /statics/ !”这句的意思,是跳过/statics/目录,也就是咱们虚拟化过的目录。
三、完整示例代码:
<VirtualHost *:80> DocumentRoot /www/web/wechat/public_html ServerName wechat.xcwl.com ServerAlias wechat.xcwl.com CustomLog "logs/wechat.xcwl.com_access_log" common ErrorLog "logs/wechat.xcwl.com_error_log" php_admin_value open_basedir /www/web/xcwl_com:/tmp:/www/tomcat/webapps/WeChat/statics Alias /statics /www/tomcat/webapps/WeChat/statics/ <IfModule mod_deflate.c> DeflateCompressionLevel 7 AddOutputFilterByType DEFLATE text/html text/plain text/xml application/x-httpd-php AddOutputFilter DEFLATE css js html htm gif jpg png bmp php </IfModule> <IfModule mod_proxy.c> ProxyRequests Off ProxyPass /statics/ ! ProxyPass / http://localhost:8080/WeChat/ ProxyPassReverse / http://localhost:8080/WeChat/ </IfModule> </VirtualHost> <Directory /www/web/wechat> Options Indexes FollowSymLinks AllowOverride All Require all granted </Directory> <Directory /www/tomcat/webapps/WeChat/statics> Options Indexes FollowSymLinks AllowOverride All Require all granted </Directory>
四、遇到的坑
1、Apache反向代理有两种比较简易的方式实现,一种就是利用Apache的反向代理,另外一种是通过伪静态,具体伪静态配置如下:
端口型(未测试):
RewriteEngine on RewriteCond %{SERVER_PORT} !^8080 RewriteRule ^/(.*) http://www.xcwl.com:8080/WeChat/$1 [P,L]
域名型(未测试,如果301跳转的话,下方的[P,L]修改为[R=301,L]):
RewriteEngine on RewriteCond %{HTTP_HOST} !^www.xcwl.com RewriteRule ^/(.*) http://www.xcwl.com/$1 [P,L]
2、配置之后,老出现404、403的错误或者200正常,开始以为是连接数资源不够,结果,重启了服务器完美解决!