1. 程式人生 > >Nginx+Tomcat多站點訪問預設主頁問題

Nginx+Tomcat多站點訪問預設主頁問題

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>
06 </Host>
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>
11 </Host>
12 </Engine>

Engine 的 dafaultHost :表示訪問該tomcat預設進入的主機,注意一定不能是localhost,不然別人通過你的ip訪問,就會預設進入tomcat的管理介面。
Host 的 name:表示該主機繫結的域名,如果繫結localhost則可以通過在瀏覽器中輸入localhost訪問該Host。
Host的 appBase:表示該主機繫結的檔案存放路徑,可以使用相對路徑或絕對路徑。
注意:Host的appBase這裡必須寫絕對路徑,即跟context的docBase路徑一致,否則訪問指定域名時訪問不了配置的站點的主頁。把專案相關檔案放入到你配置context的docBase路徑的ROOT資料夾裡。

2.看看Nginx反向代理Tomcat的配置:

001 user www;
002
003 # 根據你伺服器的cpu核數來確定此值
004 worker_processes 2;
005
006 error_log logs/error.log crit;
007 #error_log logs/error.log notice;
008 #error_log logs/error.log info;
009
010 #pid logs/nginx.pid;
011
012 worker_rlimit_nofile 65535;
013
014 # events事件主要用來確定Nginx使用哪種演算法
015 events {
016 use epoll;
017 worker_connections 65535;
018 }
019
020 http {
021 include mime.types;
022 default_type application/octet-stream;
023
024 #log_format main '$remote_addr - $remote_user [$time_local] "$request" '
025 # '$status $body_bytes_sent "$http_referer" '
026 # '"$http_user_agent" "$http_x_forwarded_for"';
027
028 # 由於Nginx用於代理Tomcat,所以記錄訪問日誌的事情交給Tomcat來做好了,註釋掉
029 #access_log logs/access.log main;
030
031 sendfile on;
032 tcp_nopush on;
033 tcp_nodelay on;
034
035 #keepalive_timeout 0;
036 keepalive_timeout 65;
037
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;
043
044 # 代理的相關引數設定
045 proxy_connect_timeout 5;
046 proxy_read_timeout 60;
047 proxy_send_timeout 5;
048 proxy_buffer_size 16k;
049 proxy_buffers 4 64k;
050 proxy_busy_buffers_size 128k;
051 proxy_temp_file_write_size 128k;
052
053 # 啟用gzip壓縮,提高使用者訪問速度
054 gzip on;
055 gzip_min_length 1k;
056 gzip_buffers 4 16k;
057 gzip_http_version 1.1;
058 gzip_comp_level 2;
059 gzip_types text/plain application/x-javascript text/css application/xml;
060 gzip_vary on;
061
062 # 配置需要代理的tomcat
063 upstream tomcat_proxy{
064 server 199.181.132.250:8080;
065 }
066
067 # 虛擬主機:www.abc.com
068 server {
069 listen 80;
070 server_name abc.com www.abc.com;
071 index index.html index.htm index.jsp;
072 root /home/www/abc/ROOT;
073
074 if (-d $request_filename){
075 rewrite ^/(.*)([^/])$ http://$host/$1$2/ permanent;
076 }
077
078 # 動態頁面,交給tomcat處理
079 location ~ \.(jsp|jspx|do|action)?$ {
080 proxy_set_header Host $host;
081 proxy_set_header X-Forwarded-For $remote_addr;
083 }
084
085 # 使用者瀏覽器端的快取設定
086 location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
087 expires 10d;
088 }
089
090 location ~ .*\.(js|css)?$ {
091 expires 1h;
092 }
093
094 access_log off;
095 #charset koi8-r;
096 #access_log logs/host.access.log main;
097 }
098
099 # 虛擬主機:www.abd.com
100 server {
101 listen 80;
102 server_name abd.com www.abd.com;
103 index index.html index.htm index.jsp;
104 root /home/www/abd/ROOT;
105
106 if (-d $request_filename){
107 rewrite ^/(.*)([^/])$ http://$host/$1$2/ permanent;
108 }
109
110 location ~ \.(jsp|jspx|do|action)?$ {
111 proxy_redirect off;
112 proxy_set_header Host $host;
113 proxy_set_header X-Forwarded-For $remote_addr;
115 }
116
117 location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
118 expires 10d;
119 }
120
121 location ~ .*\.(js|css)?$ {
122 expires 1h;
123 }
124
125 access_log off;
126 #charset koi8-r;
127 #access_log logs/host.access.log main;
128 }
129 }

需要注意的地方:root 的值是對應上面Tomcat配置檔案中context的docBase值+/ROOT,Tomcat根據server.xml的host的appBase設定,預設訪問此appBase的ROOT資料夾裡的設定的預設主頁,因此我們把專案檔案都放在context的docBase的ROOT資料夾中。

注意以上幾個細節,那就實現訪問各個站點的預設主頁了,不再轉向Tomcat的主頁