Nginx反向代理Tomcat
環境準備,tomcat是已經部署好jforum網站了
一臺nginx+一臺tomcat
[root@localhost vhosts]# ps -ef | grep tomcat
root 10865 1 1 15:37 pts/1 00:00:37 /usr/java/jdk1.8.0_131/bin/java -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Djava.endorsed.dirs=/usr/local/tomcat/endorsed -classpath /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/tomcat -Dcatalina.home=/usr/local/tomcat -Djava.io.tmpdir=/usr/local/tomcat/temp org.apache.catalina.startup.Bootstrap start
[root@localhost vhosts]# ps -ef | grep nginx
root 17755 1 0 16:24 ? 00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx 17781 17755 0 16:31 ? 00:00:00 nginx: worker process
nginx反向代理到tomcat
server {
listen 80;
server_name v1.test.net;
location / {
proxy_set_header host $host;
proxy_pass http://192.168.179.102:8080;
}
}
[root@localhost ~]# /usr/local/nginx/sbin/nginx -s reload
直接在瀏覽器輸入192.168.179.102:80可以看到反向代理成功 ,是不是很簡單 ,哈哈
Nginx和Tomcat負載均衡+動靜分離
因爲後端只有一臺tomcat。如果有多臺nginx會負載均衡到多臺tomcat。如果需要部署多臺tomcat只需要拷貝其目錄就行
[root@localhost ~]# cp /usr/local/tomcat/ /usr/local/tomcat_v1 -a
[root@localhost ~]# cd /usr/local/tomcat_v1/
[root@localhost tomcat_v1]# bin/startup.sh
Using CATALINA_BASE: /usr/local/tomcat_v1
Using CATALINA_HOME: /usr/local/tomcat_v1
Using CATALINA_TMPDIR: /usr/local/tomcat_v1/temp
Using JRE_HOME: /usr/java/jdk1.8.0_131
Using CLASSPATH: /usr/local/tomcat_v1/bin/bootstrap.jar:/usr/local/tomcat_v1/bin/tomcat-juli.jar
Tomcat started.
這個日誌是tomcat主日誌
[root@localhost tomcat_v1]# ll /usr/local/tomcat_v1/logs/catalina.out
-rw-r--r--. 1 root root 27800 May 30 13:15 /usr/local/tomcat_v1/logs/catalina.out
#可以看到tomcat_v1和之前tomcat端口衝突了,啓動失敗了
[root@localhost tomcat_v1]# tail -10f /usr/local/tomcat_v1/logs/catalina.out
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:351)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:485)
30-May-2020 13:15:30.798 INFO [main] org.apache.coyote.AbstractProtocol.pause Pausing ProtocolHandler ["http-nio-8080"]
30-May-2020 13:15:30.798 INFO [main] org.apache.coyote.AbstractProtocol.pause Pausing ProtocolHandler ["ajp-nio-8009"]
30-May-2020 13:15:30.799 INFO [main] org.apache.catalina.core.StandardService.stopInternal Stopping service Catalina
30-May-2020 13:15:31.016 INFO [main] org.apache.coyote.AbstractProtocol.stop Stopping ProtocolHandler ["http-nio-8080"]
30-May-2020 13:15:31.016 INFO [main] org.apache.coyote.AbstractProtocol.destroy Destroying ProtocolHandler ["http-nio-8080"]
30-May-2020 13:15:31.017 INFO [main] org.apache.coyote.AbstractProtocol.stop Stopping ProtocolHandler ["ajp-nio-8009"]
30-May-2020 13:15:31.017 INFO [main] org.apache.coyote.AbstractProtocol.destroy Destroying ProtocolHandler ["ajp-nio-8009"]
這個文件是tomcat的配置文件
#修改端口號避免衝突
[root@localhost tomcat_v1]# ll /usr/local/tomcat_v1/conf/server.xml
-rw-------. 1 root root 6458 Nov 9 2016 /usr/local/tomcat_v1/conf/server.xml
#修改三個端口配置
<Server port="8006" shutdown="SHUTDOWN">
<Connector port="8081" protocol="HTTP/1.1"
<Connector port="8010" protocol="AJP/1.3" redirectPort="8443" />
#修改完後重啓即可,保證和之前在一臺服務器上的tomcat端口不同即可
[root@localhost tomcat_v1]# /usr/local/tomcat_v1/bin/startup.sh
#由於tomcat_v1拷貝的是tomcat的目錄,所以tmocat發佈目錄和tomcat_v1的發佈目錄內容一樣訪問
http://192.168.179.102:8081/forums/list.page
http://192.168.179.102:8080/forums/list.page
都可以得到相同的頁面
配置Nginx,將上面新添加的一臺添加在負載均衡組裏面,同時配置動靜分離
#動靜分離
[root@localhost tomcat_v1]# cat /usr/local/nginx/conf/nginx.conf
http {
upstream tomcat_web{
server 127.0.0.1:8080 max_fails=2 fail_timeout=15;
server 127.0.0.1:8081 max_fails=2 fail_timeout=15;
}
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name v1.test.net;
#這裏不需要配置root沒有意義,因爲直接proxy_pass
location / {
proxy_pass http://tomcat_web;
proxy_set_header host $host;
proxy_next_upstream error timeout http_500 http_502 http_503 http_504 http_404;
proxy_set_header X-Real_IP $remote_addr;
}
#實現tomcat和nginx動靜分離
location ~ .*\.(js|css)$ {
root /usr/local/nginx/html/v1.test.net;
expires 7d;
access_log off;
}
location ~ .*\.(eot|ttf|otf|woff|svg)$ {
root /usr/local/nginx/html/v1.test.net;
expires 30d;
access_log off;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|mp4|ico)$ {
root /usr/local/nginx/html/v1.test.net;
expires 30d;
access_log off;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
再去訪問可以看到已經動靜分離了,但是在nginx虛擬主機的發佈目錄下面html/v1.test.net是不存在圖片的
[root@localhost ~]# cp -r /usr/local/tomcat/webapps/ROOT/* /usr/local/nginx/html/v1.test.net/
將tomcat目錄下面所有文件全部拷貝到nginx發佈目錄下面,這樣靜態文件就在發佈目錄下面了,再次刷新就可以看到圖片等靜態資源全部訪問到了。所以靜態資源全部找到了,動態資源就放在上游的tomcat
#動態走
location / {
proxy_pass http://tomcat_web;
proxy_set_header host $host;
}
#靜態走
location ~ .*\.(js|css)$ {
root /usr/local/nginx/html/v1.test.net;
expires 7d;
access_log off;
}
location ~ .*\.(eot|ttf|otf|woff|svg)$ {
root /usr/local/nginx/html/v1.test.net;
expires 30d;
access_log off;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|mp4|ico)$ {
root /usr/local/nginx/html/v1.test.net;
expires 30d;
access_log off;
}
至此動靜分離+負載均衡搭建完畢是不是很簡單呢?