一、ngnix + tomcat
1、ngnix配置如下
server {
listen 801;
server_name localhost;
location /planeApi {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Host $remote_addr;
proxy_pass http://127.0.0.1:8095;
}
}
2、tomcat server.xml 添加如下配置,tomcat 的webapp下的war包名字改爲 planeApi.war
<Context path="/" docBase="C:\software\apache-tomcat-8.5.24\webapps" reloadable="true" />
如上,我們在訪問 http://localhost:801/planeApi 時會被ngnix 轉發到 http://localhost:8095 上,即我們訪問 http://localhost:801/planeApi/test 就是訪問 http://localhost:8095/planeApi/test
有個小方法,我們不需要配置tomcat裏面的server.xml文件,那就是直接把 war 包文件的名字修改爲 ROOT.war,當然,這樣修改的話,訪問 http://localhost:801/planeApi/test 就是訪問 http://localhost:8095/test
二、ngnix 本身,配置如下
server {
listen 80;
server_name localhost;
location /plane {
root test;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
如上,我們訪問 http://localhost/plane 時就會訪問到 ngnix 根目錄下的 test/plane目錄下的文件,即訪問的是 http://localhost/plane/index.html
這裏出了一個坑,如下圖,ngnix 自身有一個默認的server配置,它也是監聽的localhost 80 端口,然後因爲優先級順序,以及 location配置的關係,導致我們在訪問 http://localhost/plane 時,它去 ngnix 的 html 目錄下找 plane 目錄了,當然,這是肯定找不到的,會報錯404......
三、順便說一下 ngnix 的 location 常用的配置
location = / {
精確匹配,必須是127.0.0.1/
}
location / {
什麼都可以匹配
http://localhost/register11
http://localhost/register111
}
location = /login {
精確匹配,必須是127.0.0.1/login
}
location ^~ /static/ {
非精確匹配,並且不區分大小寫,
比如 http://127.0.0.1/static/js,http://localhost/static/a.html
}
location ~ \.(gif|jpg|png|js|css)$ {
區分大小寫,以gif,jpg,js結尾
比如 http://localhost/a.gif, http://localhost/b.jpg
}
location ~* \.png$ {
不區分大小寫,匹配.png結尾的
比如 http://localhost/b.png
}
location !~ \.xhtml$ {
區分大小寫,匹配不以.xhtml結尾的
比如 http://localhost/a.xhtml 會被排除掉
}
location !~* \.xhtml$ {
不區分大小寫,匹配不以.xhtml結尾的
比如 http://localhost/a.XHTML,http://localhost/a.xhtml 都會被排除掉
}
四、alias、root 的區別
location /plane {
alias /test/;
}
如上,訪問 /plane/ 裏面的文件時,ngnix 則會去 /tets/ 目錄下找文件,alias 是一個目錄別名的定義,alias 後面必須用 / 結束,否則找不到文件,到時候會懵逼的......
location /plane {
root test;
}
如上,訪問 /plane/ 裏面的文件時,ngnix 則會去 /tets/plane/ 目錄下找文件,root 是 最上層根目錄的定義,後面的 / 可有可無,不重要,也不影響......