nginx+tomcat部署笔记
来源:互联网 发布:网页视频剪辑软件 编辑:程序博客网 时间:2024/06/06 00:11
公司服务器端一直是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服务器的强项# 有两种配置模式,目录匹配或后缀匹配,任选其一或搭配使用# 这里^表示强制匹配,一旦匹配成功,不会再去找其他locationlocation ^~ /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
- nginx+tomcat部署笔记
- Nginx+Tomcat集群部署
- nginx配置tomcat部署
- nginx+tomcat分布式部署
- nginx tomcat javaweb部署
- windows nginx + tomcat 部署
- Nginx+Tomcat+Mencached负载均衡集群部署笔记
- Nginx+Tomcat负载均衡部署
- Linux下nginx+tomcat部署
- linux 部署tomcat 搭建nginx
- centos6.5 nginx+tomcat部署
- Nginx Tomcat 简单部署实例
- nginx + tomcat的简单部署
- nginx+tomcat+java部署总结
- Nginx和Tomcat集群部署
- 【Nginx】Nginx + Tomcat + SpringBoot 部署项目
- Nginx反向代理+tomcat安装部署
- linux下nginx结合tomcat安装部署
- robot framework-requests库安装过程问题解决
- ES6——块级作用域(let)
- 抛物线动效
- 栈的链式存储的实现与操作
- 贪心算法--邮局选址,输油管道问题
- nginx+tomcat部署笔记
- Go语言解析YAML
- 模板模式-抽象模板
- tensorflow相关函数及其功能(留着自己备忘)
- Unity回调函数
- Log4J学习记录
- LeetCode530. Minimum Absolute Difference in BST
- 【codeforces 516B】Drazil and Tiles
- 跑通kaldi中timit试验以及awk不能找到gensub函数解决方法