Nginx+Tomcat配置后,访问多个站点时,默认主页老转向Tomcat的主页。
经过仔细检查,发现问题所在,我想这也是大家常常需要注意的地方,否则经常出现以上类似问题会让人懊恼的。
1.Tomcat的server.xml文件配置多个站点:
<Engine name="Catalina" defaultHost="www.abc.com"> <Host name="www.abc.com" appBase="/home/www/abc" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> <context path="" docBase="/home/www/abc" debug="0" reloadable="true"></context> </Host> <Host name="www.abd.com" appBase="/home/www/abd" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> <context path="" docBase="/home/www/abd" debug="0" reloadable="true"></context> </Host></Engine>
Engine 的 dafaultHost :表示访问该tomcat默认进入的主机,注意一定不能是localhost,不然别人通过你的ip访问,就会默认进入tomcat的管理界面。
Host 的 name:表示该主机绑定的域名,如果绑定localhost则可以通过在浏览器中输入localhost访问该Host。
Host的 appBase:表示该主机绑定的文件存放路径,可以使用相对路径或绝对路径。
注意:Host的appBase这里必须写绝对路径,即跟context的docBase路径一致,否则访问指定域名时访问不了配置的站点的主页。把项目相关文件放入到你配置context的docBase路径的ROOT文件夹里。
2.看看Nginx反向代理Tomcat的配置:
user www;# 根据你服务器的cpu核数来确定此值 worker_processes 2;error_log logs/error.log crit;#error_log logs/error.log notice;#error_log logs/error.log info;#pid logs/nginx.pid;worker_rlimit_nofile 65535;# events事件主要用来确定Nginx使用哪种算法 events { use epoll; worker_connections 65535; }http { include mime.types; default_type application/octet-stream; #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' # '$status $body_bytes_sent "$http_referer" ' # '"$http_user_agent" "$http_x_forwarded_for"';# 由于Nginx用于代理Tomcat,所以记录访问日志的事情交给Tomcat来做好了,注释掉 #access_log logs/access.log main;sendfile on; tcp_nopush on; tcp_nodelay on;#keepalive_timeout 0; keepalive_timeout 65;server_names_hash_bucket_size 128; client_header_buffer_size 32k; large_client_header_buffers 4 32k; client_max_body_size 300m; client_body_buffer_size 512k;# 代理的相关参数设置 proxy_connect_timeout 5; proxy_read_timeout 60; proxy_send_timeout 5; proxy_buffer_size 16k; proxy_buffers 4 64k; proxy_busy_buffers_size 128k; proxy_temp_file_write_size 128k;# 启用gzip压缩,提高用户访问速度 gzip on; gzip_min_length 1k; gzip_buffers 4 16k; gzip_http_version 1.1; gzip_comp_level 2; gzip_types text/plain application/x-javascript text/css application/xml; gzip_vary on;# 配置需要代理的tomcat upstream tomcat_proxy{server 199.181.132.250:8080; }# 虚拟主机:www.abc.com server { listen 80; server_name abc.com www.abc.com; index index.html index.htm index.jsp; root /home/www/abc/ROOT;if (-d $request_filename){ rewrite ^/(.*)([^/])$ http://$host/$1$2/ permanent; }# 动态页面,交给tomcat处理 location ~ \.(jsp|jspx|do|action)?$ { proxy_set_header Host $host; proxy_set_header X-Forwarded-For $remote_addr;proxy_pass http://tomcat_proxy; }# 用户浏览器端的缓存设置 location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ { expires 10d; }location ~ .*\.(js|css)?$ { expires 1h; }access_log off; #charset koi8-r; #access_log logs/host.access.log main; }# 虚拟主机:www.abd.com server { listen 80; server_name abd.com www.abd.com; index index.html index.htm index.jsp; root /home/www/abd/ROOT;if (-d $request_filename){ rewrite ^/(.*)([^/])$ http://$host/$1$2/ permanent; }location ~ \.(jsp|jspx|do|action)?$ { proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $remote_addr; proxy_pass http://tomcat_proxy; }location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ { expires 10d; }location ~ .*\.(js|css)?$ { expires 1h; }access_log off; #charset koi8-r; #access_log logs/host.access.log main; } }
需要注意的地方:root 的值是对应上面Tomcat配置文件中context的docBase值+/ROOT,Tomcat根据server.xml的host的appBase设置,默认访问此appBase的ROOT文件夹里的设置的默认主页,因此我们把项目文件都放在context的docBase的ROOT文件夹中。
注意以上几个细节,那就实现访问各个站点的默认主页了,不再转向Tomcat的主页
http://www.denghuafeng.com/post-157.html
本文转自 stock0991 51CTO博客,原文链接:http://blog.51cto.com/qing0991/1772584