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.htmllocation匹配字段不能随意书写,因为在执行反向代理访问Tomcat服务资源时,访问的地址部分字段是由location的匹配字段所提供的。

参考文章
https://www.hangge.com/blog
https://www.cnblogs.com/

以上是关于Nginx反向代理+Tomcat服务的主要内容,如果未能解决你的问题,请参考以下文章

nginx反向代理tomcat8和php7(四)

技术干货Nginx配置反向代理

nginx+tomcat简单反向代理+nginx监控

Tomcat集群+Nginx反向代理+负载均衡

使用nginx反向代理tomcat集群

Web服务器群集——部署Java项目,实现Nginx反向代理Tomcat服务器