初识nginx
1.负载均衡
1.轮询
轮询是比较简单的使用方式, 即按照顺序将请求依次分发给不同的服务器.
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
# 服务器列表
upstream server_list {
server 10.0.0.1:8080;
server 10.0.0.2:8080;
server 10.0.0.3:8080;
}
server {
listen 80;
server_name www.pilot123456.com;
location / {
// 代理
proxy_pass http://server_list;
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
2.加权轮询
根据不同服务器的性能状态分配不同的权重, 使得性能较好的服务器能够处理更多的请求.
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
# 服务器列表
upstream server_list {
# 给每一个服务器配置相应的权重
server 10.0.0.1:8080 weight=2;
server 10.0.0.2:8080 weight=3;
server 10.0.0.3:8080 weight=5;
}
server {
listen 80;
server_name www.pilot123456.com;
location / {
// 代理
proxy_pass http://server_list;
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
3.ip_hash
前两种方式, 如果用户登录信息仅通过服务器保存, 而没有采用其他方式(如redis存储, jwttoken等), 那么用户在一台服务器上登录后, 之后访问另一台服务器, 可能会出现登录信息丢失的情况, ip_hash可以将同一个ip的请求发送到同一台机器, 但是对于移动端设备, 效果不太好, 一般不推荐适用.
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
# 服务器列表
upstream server_list {
# 将同一ip请求发送到同一服务器
ip_hash;
# 给每一个服务器配置相应的权重
server 10.0.0.1:8080 weight=2;
server 10.0.0.2:8080 weight=3;
server 10.0.0.3:8080 weight=5;
}
server {
listen 80;
server_name www.pilot123456.com;
location / {
// 代理
proxy_pass http://server_list;
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
4.least_conn
将请求发送给连接数较少的服务器, 但是在一些服务器连接数处理的任务本身比较耗时的时候, 会给服务器带来更大压力, 因此比较适用于请求需要处理的时间差不多的情况
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
# 服务器列表
upstream server_list {
# 将请求发送给连接数较少的服务器
lease_conn;
# 给每一个服务器配置相应的权重
server 10.0.0.1:8080;
server 10.0.0.2:8080;
server 10.0.0.3:8080;
}
server {
listen 80;
server_name www.pilot123456.com;
location / {
// 代理
proxy_pass http://server_list;
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
2.URLRewrite
rewrite 语法格式及参数说明, 将匹配regex的内容替换为replacement
rewrite ;
regex 正则表达式
replacement 替换内容
flag 标记
last 本条规则匹配完成后, 继续向下匹配新的规则
break 本条规则匹配完成后, 不再匹配后面的规则
redirect 302临时重定向, 浏览器地址跳转到新的url
permanent 301永久重定向, 浏览器地址跳转到新的url
1.商品页变化
# www.xx.com/id=333 ==> www.xx.com/333.html
rewrite ^/id=(\d+)$ /$1.html permanent;
2.http请求变https
rewrite ^(.*)$ https://$hsot$1 permanent;
3.旧域名变新域名
rewrite ^/(.*) http://www.new.com/$1 permanent;
3.动静分离
一般静态资源是指html, js, css, img等文件, 动态资源指的是web后台资源, 而动静分离指的是将静态资源的请求只走nginx, 不再需要从后台服务器加载, 而后台服务器只处理动态数据请求.
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
# 服务器列表
upstream server_list {
# 将请求发送给连接数较少的服务器
lease_conn;
# 给每一个服务器配置相应的权重
server 10.0.0.1:8080;
server 10.0.0.2:8080;
server 10.0.0.3:8080;
}
server {
listen 80;
server_name www.pilot123456.com;
#拦截后台请求
location / {
proxy_pass http://localhost:81;
proxy_set_header X-Real-IP $remote_addr;
}
#静态资源
location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|js|css)$ {
# 将静态资源放置到nginx的html目录下即可
root html;
# 将资源缓存到用户浏览器上
expires 10d;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}