ngnix 相关
一、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 是 最上层根目录的定义,后面的 / 可有可无,不重要,也不影响......
上一篇: RTMP协议消息分析
下一篇: SSL交互简述及nginx双向认证配置