Nginx入门到放弃
load balance 负载均衡
high availability 高可用
1、nginx简介
俄罗斯一位程序员开发
2、使用场景
web服务器
高并发场景
正向代理
反向代理
3、源码安装ngxin
解压:tar -zxf nginx-1.8.1.tar.gz 安装依赖:yum install gcc pcre-devel zlib-devel openssl-devel -y 配置安装路径:./configure --prefix = /opt/nginx 开始编译安装:make && make install 启动:cd /opt/nginx/sbin ./nginx ngixn加入到path中,即放到环境变量中。 常用命令: nginx -s reload | quit 安装目录: conf #配置文件 html #静态文件 sbin #可执行文件 logs #日志文件
4、负载均衡搭建
user nobody
worker_processes 1;
http{
upstream balance {
server 127.0.0.1:7877;
server 127.0.0.1:7878;
server 127.0.0.1:7879;
}
server {
listen 80; #监听端口
server_name 127.0.0.1; #监听地址
location / {
proxy_pass http://balance;
}
}
}
5、负载均衡策略
(1)轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端某台服务器宕机,故障系统被自动剔除,使用户访问不受影响;
(2)Weight增加权重
指定轮询权值,Weight值越大,分配到的访问机率越高,主要用于后端每个服务器性能不均的情况下;
upstream balance { server 127.0.0.1:7877 weight=3; server 127.0.0.1:7878 weight=2; server 127.0.0.1:7879 weight=1; }
(3)least_conn最少连接数
在连接负载最少的情况下,nginx会尽量避免将过多的请求分发给繁忙的服务器,而是将新的请求分发给不太繁忙的服务器,避免服务器过载。
upstream balance { least_conn; server 127.0.0.1:7877; server 127.0.0.1:7878; server 127.0.0.1:7879; }
(4)ip_hash
确保来自同一客户端的请求始终定向给同一台服务器,除非此服务器不可用。
每个请求按访问IP的hash结果分配,这样来自同一个IP的访客固定访问一个后端服务器,有效解决了动态网页存在的session共享问题;
upstream balance { ip_hash; server 127.0.0.1:7877; server 127.0.0.1:7878; server 127.0.0.1:7879; }
(5)fair响应时间方式,第三方插件
比上面两个更加智能的负载均衡算法。此种算法可以依据页面大小和加载时间长短智能地进行负载均衡,也就是根据后端服务器的响应时间来分配请求,响应时间短的优先分配。Nginx本身是不支持fair的,如果需要使用这种调度算法,必须下载Nginx的upstream_fair模块;
(6)url_hash依据url分配方式,第三方插件
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,可以进一步提高后端缓存服务器的效率。Nginx本身是不支持url_hash的,如果需要使用这种调度算法,必须安装Nginx 的hash软件包。
在HTTP Upstream模块中,可以通过server指令指定后端服务器的IP地址和端口,同时还可以设定每个后端服务器在负载均衡调度中的状态。常用的状态有:
- down:表示当前的server暂时不参与负载均衡;
- backup:预留的备份机器。当其他所有的非backup机器出现故障或者忙的时候,才会请求backup机器,因此这台机器的压力最轻;
- max_fails:允许请求失败的次数,默认为1。当超过最大次数时,返回proxy_next_upstream 模块定义的错误;
- fail_timeout:在经历了max_fails次失败后,暂停服务的时间。max_fails可以和fail_timeout一起使用。
http协议长连接,复用连接。
6、资源静态化
配置静态资源路径
location ^~/static/ { root html }
图床,由单个服务器统一处理图片。
7、虚拟主机
虚拟主机时指在网络服务器上分出一定的磁盘空间,用户可以租用此部分空间,以供用户放置站点及应用组件,提供必要的数据存放和传输功能。
分类:
(1)基于域名的虚拟主机,通过域名来区分虚拟主机。(域名不一样,端口一样)
http{
upstream aaa {
server 192.168.0.1:8080;
server 192.168.0.2:8080;
server 192.168.0.3:8080;
}
upstream bbb {
server 192.168.0.1:18080;
server 192.168.0.2:18080;
server 192.168.0.3:18080;
}
server {
listen 80; #监听端口
server_name www.aaa.com; #监听地址
location / {
proxy_pass http://aaa;
}
}
server {
listen 80; #监听端口
server_name www.bbb.com; #监听地址
location / {
proxy_pass http://bbb;
}
}
}

(2)基于端口的虚拟主机,通过端口来区分虚拟主机。(域名一样,端口不一样)
http{
upstream aaa {
server 192.168.0.1:8080;
server 192.168.0.2:8080;
server 192.168.0.3:8080;
}
server {
listen 8080; #监听端口
server_name www.aaa.com; #监听地址
location / {
proxy_pass http://aaa;
}
}
server {
listen 8081; #监听端口
server_name www.aaa.com; #监听地址
location / {
proxy_pass http://192.168.0.4:8080;
}
}
}

hosts文件:c:\Windows\System32\drivers\etc\hosts 192.168.0.1 www.aaa.com 192.168.0.1 www.bbb.com 192.168.0.1 www.ccc.com
一台Linux启动多台tomcat
多个项目可以部署在同一个tomcat中,缺点是更新其中一个,需要停止所有服务。建议每个应用部署一个tomcat,方便更新。
8、Session一致性
9、配置文件详解
配置文件结构:
main(全局设置)块设置的指令将影响其它所有设置。server继承main,location继承server,upstream既不会继承其它设置,也不会被继承。
... #全局块
events { #events块
...
}
http #http块
{
... #http全局块
upstream #负载均衡服务器设置
server #server块,主机设置,指定主机和端口
{
... #server全局块
location [PATTERN] #location块 URL匹配特定位置的设置
{
...
}
location [PATTERN]
{
...
}
}
server
{
...
}
... #http全局块
}
配置文件详解:
#user 指定运行nginx的用户和组(第一个参数为用户,第二个为组,这里只有用户)
#user nobody
#指定工作进程数(一般设置为CPU的核数)
worker_processes 1;
#指定错误日志为logs/ 目录下的error.log文件
#error_log logs/error.log;
#指定错误日志,并指定写入格式为notice
#error_log logs/error.log notice;
#指定错误日志,并指定写入格式为info
#error_log logs/error.log info;
#指定pid文件(存放主进程pid号)
#pid logs/nginx.pid;
#nginx 连接配置模块
events{
accept_mutex on; #设置网路连接序列化,防止惊群现象发生,默认为on
multi_accept on; #设置一个进程是否同时接受多个网络连接,默认为off
#use epoll; #事件驱动模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport
worker_connections 1024; #指定每个工作进程最大连接数为1024,默认为512
}
#http配置模块
http{
#文件扩展名与文件类型映射表。通过include家在mime.type文件,里面的types{}模块将文件扩展名映射到响应为MIME类型
include mime.types;
default_type application/octet-stream; #定义响应的默认MIME类型,默认为text/plain
#access_log off; #取消服务日志
#自定义存入日志的格式
log_format myFormat '$remote_addr–$remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for'; #自定义格式
access_log log/access.log myFormat; #combined为日志格式的默认值
sendfile on; #允许sendfile方式传输文件,默认为off,可以在http块,server块,location块。
sendfile_max_chunk 100k; #每个进程每次调用传输数量不能大于设定的值,默认为0,即不设上限。
#tcp_nopush on;#启用或者禁用使用套接字选项(仅在sendfile使用时使用)
keepalive_timeout 65; #连接超时时间,默认为75s,可以在http,server,location块。http协议1.1之后支持长链接。
#gzip on;#启用或者禁用gzip
upstream mysvr {
ip_hash;#负载均衡调度算法
server 127.0.0.1:7878;
server 192.168.10.121:3333 backup; #热备
}
upstream ADMIN-SERVER {
server nyshop:7878;
}
error_page 404 https://www.baidu.com; #错误页
server {
keepalive_requests 120; #单连接请求上限次数。
listen 4545; #监听端口
server_name 127.0.0.1; #监听地址
location ~*^.+$ { #请求的url过滤,正则匹配,~为区分大小写,~*为不区分大小写。
#root path; #根目录
#index vv.txt; #设置默认页
proxy_pass http://mysvr; #请求转向mysvr 定义的服务器列表
deny 127.0.0.1; #拒绝的ip
allow 172.18.5.54; #允许的ip
}
location / {
root /app/admin-web/;
index index.html index.htm;
try_file $url $url/ /index.html;
}
location ~/static/ {
root /app/admin-web/;
index index.html index.htm;
try_file $url $url/ /index.html;
}
#定位前端页面
location /merchant-web/ {
alias /app/merchant-web/;
index index.html index.htm;
try_file $url $url/ /merchant-web/index.html;
}
#转发后端接口
location ~/admin-server/ {
proxy_pass http://ADMIN-SERVER;
proxy_set_header Referer $http_referer
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location ~/business-server/ {
proxy_pass http://BUSINESS-SERVER;
proxy_set_header Referer $http_referer
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
}
补充扩展:
MIME 类型,多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。
MIME (Multipurpose Internet Mail Extensions) 是描述消息内容类型的因特网标准。
MIME 消息能包含文本、图像、音频、视频以及其他应用程序专用的数据。
官方的 MIME 信息是由 Internet Engineering Task Force (IETF) 在下面的文档中提供的:
RFC-822 Standard for ARPA Internet text messages
RFC-2045 MIME Part 1: Format of Internet Message Bodies
RFC-2046 MIME Part 2: Media Types
RFC-2047 MIME Part 3: Header Extensions for Non-ASCII Text
RFC-2048 MIME Part 4: Registration Procedures
RFC-2049 MIME Part 5: Conformance Criteria and Examples
不同的应用程序支持不同的 MIME 类型。
10、路径路由规则

root 匹配域名后面的所有
alias 匹配最后
root的处理结果是:root路径+location路径
alias的处理结果是:使用alias路径替换location路径
使用root,实际的路径就是:root值 + location值。 使用alias,实际的路径就是:alias值。 例如, 有一张图片,URL是:www.awaimai.com/static/a.jpg 它在服务器的路径是:/var/www/app/static/a.jpg 那么用root的配置是: location /static/ { root /var/www/app/; } 用alias的配置就是: location /static/ { alias /var/www/app/static/; } 对于alias,location值可以随便取,例如: location /hello/ { alias /var/www/app/static/; } 这样,我们访问图片的地址就是:www.awaimai.com/hello/a.jpg 注意: 很多文章说:alias 后面必须要用 “/” 结束,是错误的,亲测加不加/效果是一样的。 alias在使用正则匹配时,必须捕捉要匹配的内容,并在指定的内容处使用。 alias只能位于location块中,root可以不放在location中。
感谢阅读到现在,请在留言区提出宝贵的意见!
更多精彩内容,关注微信公众号:技术严选


浙公网安备 33010602011771号