Nginx反向代理+Tomcat服务
Posted 学术袁
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx反向代理+Tomcat服务相关的知识,希望对你有一定的参考价值。
准备资源
点击下载nginx+tomcat资源包,并在当前windows系统的host文件中进行配置
127.0.0.1 www.vitamin.com
182.92.187.217 blog.csdn.net
配置tomcat执行环境,并修改资源包nginx中conf/nginx.conf的自己的server_name
高级系统设置-环境变量- 系统变量
新建
TOMCAT_HOME
=D:\\apache-tomcat-8.5.69
(我的目录)
新建CATALINA_HOME
=D:\\apache-tomcat-8.5.69
(我的目录)
新增Path
=;%TOMCAT_HOME%\\bin;%CATALINA_HOME%\\lib
启动服务
启动tomcat
环境配置后,在windows的doc窗口通过tomcat启动指令startup
。启动成功【关闭进程服务可在任务管理器中操作】
#启动tomcat
C:\\Users\\Administrator>startup
验证,chrom地址栏输入www.vitamin.com/kotlin/
,查看到服务启动成功后的网页~
然后通过nginx指令start nginx
启动,启动成功【关闭进程服务可在任务管理器中操作】
#启动nginx
C:\\Users\\Administrator>start nginx
#终止nginx
C:\\Users\\Administrator>nginx -s stop
测试Nginx配置的反向代理是否正常,输入server_name+端口号+匹配字符串
验证。
#访问地址
http://192.168.1.106:8091/kotlin/index.html
代码验证ok,下面为Nginx下nginx.conf文件中的代码配置
#nginx.conf 配置
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 8091;
server_name 192.168.1.105;#当前台式机ip
charset utf-8;
#access_log logs/host.access.log main;
#入口文件的设置
location ^~ /nginx-1.12.2/html/index.html {
root C:/Users/Administrator/Desktop; #入口文件的所在目录
index index.html index.htm; #默认入口文件名称
}
location ^~ / {
root html; #入口文件的所在目录
index index.html index.htm; #默认入口文件名称
}
location /index.html {
root html; #入口文件的所在目录
index index.html index.htm; #默认入口文件名称
}
location = /segment/ {
root html; #入口文件的所在目录
index index.html index.htm; #默认入口文件名称
}
location = /websocket/ {
proxy_pass http://www.vitamin.com:8090;
}
location = /en/download.html {
proxy_pass http://nginx.org;
}
location = /yao_hou {
proxy_pass https://blog.csdn.net;
}
location = /kotlin/index.html {
proxy_pass http://www.vitamin.com:8090;
}
... ... ...
... ... ...
}
梳理
在实际操作过程,遇到一下产生困惑与混乱的几点。这里予以分享:
1,匹配原则
2,访问Nginx服务下的本地资源 {location 匹配字段不能随意写,为什么?}
3,通过Nginx反向代理访问Tomcat下的本地资源 {location 匹配字段不能随意写,为什么?}
匹配原则
~
波浪线表示执行一个正则匹配,区分大小写;
~*
表示执行一个正则匹配,不区分大小写;
^~
表示普通字符匹配,如果该选项匹配,只匹配该选项,不匹配别的选项,一般用来匹配目录。
=
进行普通字符精确匹配;
@
定义一个命名的 location,使用在内部定向时,例如 error_page, try_files
location = / {
# 只匹配"/".
}
location / {
# 匹配任何请求,因为所有请求都是以"/"开始
# 但是更长字符匹配或者正则表达式匹配会优先匹配,比如后边的[location ~* .(gif|jpg|jpeg)$]
}
location ^~ /images/ {
# 匹配任何以 /images/ 开始的请求,并停止匹配。即使后面有http://ip/images/id这样的,前面匹配到就停止不会继续向后观望。
}
location ~* .(gif|jpg|jpeg)$ {
# 匹配以 gif, jpg, or jpeg结尾的请求.
# 但是所有 /images/ 目录的请求将由[location ^~ /images/]抢先执行
}
访问Nginx服务下的本地资源
经过实践操作,Nginx服务下目录静态资源若在服务已启动的清况下,进行资源更换。通过刷新可以依然实时访问更新或已修改的资源。
经过实践操作,nginx.conf文件内server_name若不是本机ip域名,那么就需要到host文件中进行登记。比如我用到的182.92.187.217 blog.csdn.net
。否则无法执行就访问。
经过实践操作,通过location匹配到且访问root下的资源。那么执行过程是这样的
以41行代码
为例,chrome输入http://192.168.1.105:8091/nginx-1.12.2/html/index.html
然后实际执行就会访问C:/Users/Administrator/Desktop/nginx-1.12.2/html/index.html
。具体如下图
location匹配字段不能随意书写,因为在访问本地资源时,访问的地址部分字段是由location的匹配字段所提供的。
通过Nginx反向代理访问Tomcat下的本地资源
访问Tomcat下的资源与Nginx比较相似。只是访问Tomcat时需要用到反向代理。以72行代码
为例,chrome输入http://192.168.1.105:8091/kotlin/index.html
然后实际执行就会访问http://www.vitamin.com:8090/kotlin/index.html
。location匹配字段不能随意书写,因为在执行反向代理访问Tomcat服务资源时,访问的地址部分字段是由location的匹配字段所提供的。
以上是关于Nginx反向代理+Tomcat服务的主要内容,如果未能解决你的问题,请参考以下文章