server 块:和虚拟主机密切相关,虚拟主机从用户角度看,和一台独立的硬件主机是完全一样的,该技术的产生是为了节省互联网服务器硬件成本。每个 http 块可以包括多个 server 块,而每个 server 块就相当于一个虚拟主机。每个 server 块也分为全局 server 块,以及可以同时包含多个 location 块
全局 server 块:最常见的配置是本虚拟机主机的监听配置和本虚拟主机的名称或 IP 配置
location 块:一个 server 块可以配置多个 location 块,这块的主要作用是基于 Nginx 服务器接收到的请求字符串(例如 server_name/uri-string),对虚拟主机名称(也可以是 IP 别名)之外的字符串(例如前面的 /uri-string)进行匹配,对特定的请求进行处理、地址定向、数据缓存和应答控制等功能,还有许多第三方模块也在这里配置
Nginx 配置实例
1. 反向代理
启动 Tomcat 并开发对外端口,配置 nginx.conf
server {
...
server_name [IP地址]
...
location / {
...
proxy_pass http://127.0.0.1:8080
...
}
}
复制代码
启动两个 Tomcat 并分发不同的对外端口,根据访问路径跳转到不同端口的服务
server {
listen 9001 # 监听端口
server_name [IP地址]
location ~/edu/ { # 正则表达式写法,匹配符合条件的路径
...
proxy_pass http://127.0.0.1:8080
...
}
location ~/vod/ { # 正则表达式写法,匹配符合条件的路径
...
proxy_pass http://127.0.0.1:8081
...
}
}
复制代码
2. 负载均衡
启动两个 Tomcat 并分发不同的对外端口,配置 nginx.conf
http {
...
upstream myserver {
# ip_hash
# fair
server 192.168.17.219:8080 # 第一个ip:port
# server 192.168.17.219:8080 weight=1 # 分配权重
server 192.168.17.219:8081 # 第二个ip:port
}
...
server {
listen 80 # 监听端口
server_name 192.168.17.219 # IP地址
location / {
...
proxy_pass http://myserver
...
}
}
}
复制代码
分配方式:
轮询(默认):每个请求按时间顺序逐一分配到不同的后端服务器,能自动剔除宕机的服务器
weight:代表权重,默认为 1,权重越高被分配的客户端越多
ip_hash:每个请求按照 ip 的 hash 结果分配,这样每个 ip 固定访问一个后端服务器,可以解决 session 问题
fair:按后端服务器的响应时间来分配请求,响应时间短的优先分配
3. 分配方式
配置 nginx.conf
server {
listen 80 # 监听端口
server_name 192.168.17.219 # IP地址
location /www/ { # 正则表达式
...
root /data/; # 静态资源路径
index index.htm index.html
...
}
location /image/ {
root /data/;
autoindex on # 返回文件目录内容
}
}
复制代码
Nginx 原理解析
1. master-workers
每个 worker 都是独立的进程,不需要加锁,不会影响其他 worker。每个 worker 都可以把 cpu 的性能发挥到极致,因此 worker 数量最好与 cpu 数相同
可以热部署,正在工作的 worker 完成工作后再加载,其他 worker 立即重新加载
2. 连接数 worker-connection