Nginx+Tomcat多站點訪問預設主頁問題
阿新 • • 發佈:2019-01-22
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的主頁