nginx+tomcat部署笔记

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/l00149133/article/details/78645678

公司服务器端一直是nginx+tomcat的环境。其中nginx用作反向代理,动态的请求交给tomcat来处理。nginx本身处理静态内容(例如图片)

因为是从头开始学,列一下自己遇到的坑。

nginx和tomcat的安装不再赘述,我的环境是centOS,因为用的公司的openstack,有现成的nginx+tomcat的镜像,所以我只是用镜像创建了一个实例,不需要自己安装。

笔记list:
1.nginx的配置要点:http要素和server要素
我的配置(部分截取)
nginx.conf:

http {
    //上面部分忽略
    //主要是下面这句,引入别的conf文件,都写在一起比较乱,也不容易找
    include /etc/nginx/conf.d/*.conf
}

server.conf

#这里配置一个upstream,供下面使用。
#需要注意的是,因为我的tomcat跟nginx在一个实例下面,所以我用了localhost,如果不在一起,需要给出IP或者域名
upstream tomcat_server {
    server localhost:8080;
}

#这个server是nginx的服务项。
#listen表示监听接口
#server_name这里我写了一个域名,如果你也要这么写的话,客户端环境需要绑定hosts,比如我nginx服务器的IP是192.168.12.12,那你需要把这个IP绑定mytest.com
#比较搞笑的是,上面绑定的IP,是客户端绑定的,你不能把上面tomcat_server的server改成mytest.com:8080,我就犯了这个错误,因为tomcat的服务器没有绑定hosts,它根本不知道mytest.com是啥
server {
    listen       80;
    server_name  mytest.com;

    #charset koi8-r;
    #访问log路径,这个文件要真实存在
    access_log  /var/log/nginx/access.log  main;

    location / {
        #root表示“location /”的访问路径,index代表默认访问文件
        #这样当我请求mytest.com的时候,实际上是请求了root目录下的index文件
        #但是因为这里我要做反向代理,所以不需要root和index,我都注释掉了
        #其实就算是不注释掉,root和index也不会起作用,一样会转发到tomcat
        #root   /usr/share/nginx/html;
        #index  index.html index.htm;
        #proxy_pass是配置代理,“location /”表示所有请求都转发到 http://tomcat_server,
        #因为tomcat_server我已经定义过了,所以其实就是转发到了localhost:8080,
        #也就是tomcat的默认页面
        proxy_pass http://tomcat_server;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

2.nginx location的匹配
还是继续上面的server.conf:

#直接匹配网站根,通过域名访问网站首页比较频繁,使用这个会加速处理,官网如是说。
#这里是直接转发给后端应用服务器了,也可以是一个静态首页
# 第一个必选规则
location = / {
    proxy_pass http://tomcat:8080/index
}
# 第二个必选规则是处理静态文件请求,这是nginx作为http服务器的强项
# 有两种配置模式,目录匹配或后缀匹配,任选其一或搭配使用
# 这里^表示强制匹配,一旦匹配成功,不会再去找其他location
location ^~ /static/ {
    root /webroot/static/;
}
location ~* \.(gif|jpg|jpeg|png|css|js|ico)$ {
    root /webroot/res/;
}
# 第三个规则就是通用规则,用来转发动态请求到后端应用服务器
# 非静态文件请求就默认是动态请求,自己根据实际把握
# 毕竟目前的一些框架的流行,带.php,.jsp后缀的情况很少了
location / {
    proxy_pass http://tomcat:8080/
}

#可以看到,我可以直接对某个请求返回http status,这里是返回了404,可以用这个特性来提高网站的安全性,保护某些敏感后缀的文件(比如ht文件,log文件)不能被外部访问
    location ~* \.(ht|log)$ {
        return 404;
    }

更具体的location匹配规则如下:
location表达式类型
~ 表示执行一个正则匹配,区分大小写
~* 表示执行一个正则匹配,不区分大小写
^~ 表示普通字符匹配。使用前缀匹配。如果匹配成功,则不再匹配其他location。
= 进行普通字符精确匹配。也就是完全匹配。
@ “@” 定义一个命名的 location,使用在内部定向时,例如 error_page, try_files

location优先级说明
在nginx的location和配置中location的顺序没有太大关系。正location表达式的类型有关。相同类型的表达式,字符串长的会优先匹配。
以下是按优先级排列说明:
第一优先级:等号类型(=)的优先级最高。一旦匹配成功,则不再查找其他匹配项。
第二优先级:^~类型表达式。一旦匹配成功,则不再查找其他匹配项。
第三优先级:正则表达式类型(~ ~*)的优先级次之。如果有多个location的正则能匹配的话,则使用正则表达式最长的那个。
第四优先级:常规字符串匹配类型。按前缀匹配。

location优先级示例
配置项如下:

location = / {
# 仅仅匹配请求 /
[ configuration A ]
}
location / {
# 匹配所有以 / 开头的请求。但是如果有更长的同类型的表达式,则选择更长的表达式。如果有正则表达式可以匹配,则
# 优先匹配正则表达式。
[ configuration B ]
}
location /documents/ {
# 匹配所有以 /documents/ 开头的请求。但是如果有更长的同类型的表达式,则选择更长的表达式。
#如果有正则表达式可以匹配,则优先匹配正则表达式。
[ configuration C ]
}
location ^~ /images/ {
# 匹配所有以 /images/ 开头的表达式,如果匹配成功,则停止匹配查找。所以,即便有符合的正则表达式location,也
# 不会被使用
[ configuration D ]
}
location ~* \.(gif|jpg|jpeg)$ {
# 匹配所有以 gif jpg jpeg结尾的请求。但是 以 /images/开头的请求,将使用 Configuration D
[ configuration E ]
}

请求匹配示例

/ -> configuration A
/index.html -> configuration B
/documents/document.html -> configuration C
/images/1.gif -> configuration D
/documents/1.jpg -> configuration E

注意,以上的匹配和在配置文件中定义的顺序无关。
另外,configuration A/B/C/D/E实际内容是类似:

root /etc/nginx/html

3.nginx配置负载均衡
继续server.conf

#这里tomcat_server配置了2个server,而且给每个server配置了权重
#权重越大,被访问到的几率越高
upstream tomcat_server {
    server localhost:8080 weight=1;
    server 187.12.43.241:8080 weight=5;
}

server {
    listen       80;
    server_name  mytest.com;
    #这里的反向代理设置的还是上面的tomcat_server,这样就达到了负载均衡的目的
    location / {
        proxy_pass http://tomcat_server;
    }
}

不过实际上,公司的负载均衡并没有使用nginx的配置,而是使用了IP负载均衡。
关于IP负载均衡,可以看下面这篇文章:
http://blog.csdn.net/cywosp/article/details/38036537

猜你喜欢

转载自blog.csdn.net/l00149133/article/details/78645678
今日推荐