Nginx使用总结
https://mp.weixin.qq.com/s/DrfdvvMALJfuDYWCyErqbA
1. Nginx是什么
Nginx:是一个高性能的HTTP和反向代理web服务器。
1.1 什么是正向代理和反向代理
正向代理:它隐藏了真实的请求客户端,服务端不知道真实的客户端是谁,客户端请求的服务都被代理服务器代替来请求,某些上网工具扮演的就是典型的正向代理角色。用浏览器访问http://www.google.com时,被残忍的block,于是你可以在国外搭建一台代理服务器,让代理帮我去请求google.com,代理把请求返回的相应结构再返回给我。
# 正向代理到baidu 服务
location = /baidu.html {
proxy_pass http://www.baidu.com;
}
# 反向代理至 本机的8010服务
location /luban/ {
proxy_pass http://127.0.0.1:8010;
}
反向代理:隐藏了真实的服务端,当我们请求ww.baidu.com 的时候,就像拨打10086一样,背后可能有成千上万台服务器为我们服务,但具体是哪一台,你不知道,也不需要知道,你只需要知道反向代理服务器是谁就好了,www.baidu.com 就是我们的反向代理服务器,反向代理服务器会帮我们把请求转发到真实的服务器那里去。
正向代理是为客户端代理,反向代理是为服务端代理。
2. Nginx配置文件的整体结构
2.1 全局块配置【该部分配置主要影响Nginx全局】
- 配置运行Nginx服务器用户(组)
- worker process数
- Nginx进程PID存放路径
- 错误日志的存放路径
- 配置文件的引入
2.2 events块【该部分配置主要影响Nginx服务器与用户的网络连接】
- 设置网络连接的序列化
- 是否允许同时接收多个网络连接
- 事件驱动模型的选择
- 最大连接数的配置
2.3 http块
- 定义MIMI-Type
- 自定义服务日志
- 允许sendfile方式传输文件
- 连接超时时间
- 单连接请求数上限
2.4 server块
- 配置网络监听
- 基于名称的虚拟主机配置
- 基于IP的虚拟主机配置
2.5 location块
- location配置
- 请求根目录配置
- 更改location的URI
- 网站默认首页配置
3. Nginx核心功能
- 反向代理
- 负载均衡
- 动静分离
3.1 反向代理
// 下面的意思是
访问localhost,端口号9001,若路径带有hosp则访问到localhost:8201。
server {
listen 9001;
server_name localhost;
location ~ /hosp/ {
proxy_pass http://localhost:8201;
index index.html index.htm index.jsp;
}
location ~ /cmn/ {
proxy_pass http://localhost:8202;
}
}
// 关于listen 该指令用于配置网络监听。 用法如下
listen *:80 | *:8080 #监听所有80端口和8080端口
listen IP_address:port #监听指定的地址和端口号
listen IP_address #监听指定ip地址所有端口
listen port #监听该端口的所有IP连接
// 关于server_name 该指令用于虚拟主机的配置。
// 通常分为以下两种:
// 1. 基于名称的虚拟主机配置
server_name 123.com www.123.com 多个名称,中间用空格隔开。而每个名称由两段或者三段组成,每段之间用“.”隔开。
server_name *.123.com www.123.* 可以使用通配符“*”,但通配符只能用在由三段字符组成的首段或者尾端,或者由两端字符组成的尾端。
server_name ~^www\d+\.123\.com$; 还可以使用正则表达式,用“~”作为正则表达式字符串的开始标记。
// 2. 基于IP地址的虚拟主机配置
server_name 192.168.1.1 语法结构和上述域名匹配一样,而且不需要考虑通配符和正则表达式的问题。
// 关于location 该指令用于匹配 URL
location [ = | ~ | ~* | ^~] uri {
}
// proxy_pass 该指令用于设置被代理服务器的地址。可以是主机名称、IP地址加端口号的形式。
proxy_pass URL; URL 为被代理服务器的地址,可以包含传输协议、主机名称或IP地址加端口号,URI等。
// index 该指令用于设置网站的默认首页
index filename ...; 后面的文件名称可以有多个,中间用空格隔开。
3.2 负载均衡
通过上述proxy_pass 可以把请求代理至后端服务,但是为了实现更高的负载及性能, 我们的后端服务通常是多个, 这个是时候可以通过upstream 模块实现负载均衡。
// 轮询【默认】
// 权重【用weight来指定轮询的几率】
// ip哈希【确保了相同的客户端的请求一直发送到相同的服务器,以保证session会话。这样每个访客都固定访问一个后端服务器,可以解决session不能跨服务器的问题】
// 最少连接数【把请求转发给连接数较少的后端服务器。轮询算法是把请求平均的转发给各个后端,使它们的负载大致相同;但是,有些请求占用的时间很长,会导致其所在的后端负载较高。这种情况下,least_conn这种方式就可以达到更好的负载均衡效果】
// fair(第三方)按后端服务器的响应时间来分配请求,响应时间短的优先分配。
// url_hash(第三方)按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
upstream tomcat_server{
server 127.0.0.1:8000
server 127.0.0.1:9000
}
server {
listen 9001;
server_name localhost;
location ~ /hosp/ {
proxy_pass http://tomcat_server;
index index.html index.htm index.jsp;
}
location ~ /cmn/ {
proxy_pass http://tomcat_server;
}
}