Nginx+Tomcat配置后,访问多个站点时,默认主页老转向Tomcat的主页。
经过仔细检查,发现问题所在,我想这也是大家常常需要注意的地方,否则经常出现以上类似问题会让人懊恼的。
1.Tomcat的server.xml文件配置多个站点:
01 | < Engine name = "Catalina" defaultHost = "www.abc.com" > |
02 | < Host name = "www.abc.com" appBase = "/home/www/abc" |
03 | unpackWARs = "true" autoDeploy = "true" |
04 | xmlValidation = "false" xmlNamespaceAware = "false" > |
05 | < context path = "" docBase = "/home/www/abc" debug = "0" reloadable = "true" ></ context > |
07 | < Host name = "www.abd.com" appBase = "/home/www/abd" |
08 | unpackWARs = "true" autoDeploy = "true" |
09 | xmlValidation = "false" xmlNamespaceAware = "false" > |
10 | < context path = "" docBase = "/home/www/abd" debug = "0" reloadable = "true" ></ context > |
Engine 的 dafaultHost :表示访问该tomcat默认进入的主机,注意一定不能是localhost,不然别人通过你的ip访问,就会默认进入tomcat的管理界面。
Host 的 name:表示该主机绑定的域名,如果绑定localhost则可以通过在浏览器中输入localhost访问该Host。
Host的 appBase:表示该主机绑定的文件存放路径,可以使用相对路径或绝对路径。
注意:Host的appBase这里必须写绝对路径,即跟context的docBase路径一致,否则访问指定域名时访问不了配置的站点的主页。把项目相关文件放入到你配置context的docBase路径的ROOT文件夹里。
2.看看Nginx反向代理Tomcat的配置:
006 | error_log logs/error.log crit; |
012 | worker_rlimit_nofile 65535; |
017 | worker_connections 65535; |
022 | default_type application/octet-stream; |
036 | keepalive_timeout 65; |
038 | server_names_hash_bucket_size 128; |
039 | client_header_buffer_size 32k; |
040 | large_client_header_buffers 4 32k; |
041 | client_max_body_size 300m; |
042 | client_body_buffer_size 512k; |
045 | proxy_connect_timeout 5; |
046 | proxy_read_timeout 60; |
047 | proxy_send_timeout 5; |
048 | proxy_buffer_size 16k; |
050 | proxy_busy_buffers_size 128k; |
051 | proxy_temp_file_write_size 128k; |
057 | gzip_http_version 1.1; |
059 | gzip_types text/plain application/x-javascript text/css application/xml; |
063 | upstream tomcat_proxy{ |
064 | server 199.181.132.250:8080; |
070 | server_name abc.com www.abc.com; |
071 | index index.html index.htm index.jsp; |
072 | root /home/www/abc/ROOT; |
074 | if (-d $request_filename){ |
075 | rewrite ^/(.*)([^/])$ http://$host/$1$2/ permanent; |
079 | location ~ \.(jsp|jspx| do |action)?$ { |
080 | proxy_set_header Host $host; |
081 | proxy_set_header X-Forwarded-For $remote_addr; |
086 | location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ { |
090 | location ~ .*\.(js|css)?$ { |
102 | server_name abd.com www.abd.com; |
103 | index index.html index.htm index.jsp; |
104 | root /home/www/abd/ROOT; |
106 | if (-d $request_filename){ |
107 | rewrite ^/(.*)([^/])$ http://$host/$1$2/ permanent; |
110 | location ~ \.(jsp|jspx| do |action)?$ { |
112 | proxy_set_header Host $host; |
113 | proxy_set_header X-Forwarded-For $remote_addr; |
117 | location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ { |
121 | location ~ .*\.(js|css)?$ { |
需要注意的地方:root 的值是对应上面Tomcat配置文件中context的docBase值+/ROOT,Tomcat根据server.xml的host的appBase设置,默认访问此appBase的ROOT文件夹里的设置的默认主页,因此我们把项目文件都放在context的docBase的ROOT文件夹中。
注意以上几个细节,那就实现访问各个站点的默认主页了,不再转向Tomcat的主页