Nginx学习
Nginx简介
Nginx是一个高性能的HTTP和反向代理服务器。特点:占有内存小,并发能力强。
作用
Nginx可以作为静态页面的web服务器。
正向代理与方向代理
正向代理:对用户来说是可感知的。
反向代理
1-对用户是透明的(无感知的),因为客户端不需要任何配置就可以访问,
总结:正向代理隐藏客户端,反向代理隐藏服务端。
负载均衡
当并发量不大的时候,一台服务器ok,当并发量上去的时候,怎么解决呢
1-升级CPU,升级内存。(纵向升级)
2-增加服务器的数量。(横向升级)----集群的概念也就产生。
负载均衡的规则也有多种。比如:轮询,随机,等等。
动静分离
将静态资源与动态资源分开。
Nginx安装
Nginx配置文件
全局块
配置一些影响nginx服务器整体运行的配置指令,包括用户组,进程PID存放路径,日志存放路径以及日志类型等
worker_processes 1;
events块
events {
worker_connections 1024;
}
events涉及的指定主要影响:nginx服务器与用户的网络连接。
work process 下的网络连接进行序列化,是否允许同时接受多个网络连接,选取那种事件驱动模型来处理连接请求,每个work process 可以支持的最大连接数。
例如:上面的就代表 work process 支持的最大连接数是1024
事件块:这部分对nginx的性能影响较大,在实际中要灵活配合。
http块
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream gulimall{
server 127.0.0.1:88;
}
include D:/0/nginx-1.16.1/conf/conf.d/*.conf;
}
# gulimall 配置
server {
listen 90;
server_name gulimall.com;
location /static/ {
root D:/0/nginx-1.16.1/html;
}
location / {
proxy_set_header Host $host;
proxy_pass http://gulimall;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
http全局块
全局块包括
文件引入,MIME-TYPE 定义,日志自定义,连接超时时间,单链接请求数上限。
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
include D:/0/nginx-1.16.1/conf/conf.d/*.conf;
}
server服务块
这块和虚拟主机有密切关系。
每个http块可以包含多个server块,而每个server块就相当于一个虚拟主机。
而每个server快分分为全局server快,以及可以同时包含多个location块。
全局server块
配置:本虚拟主机的监听配置和本虚拟主机名称以及IP配置。
location 块
主要作用:nginx服务器接收到的请求字符串(serverName/uriString),对请求路径进行匹配,对特定的请求进行处理。
地址定向,数据缓存,应答控制。
server {
listen 90;
server_name gulimall.com;
location /static/ {
root D:/0/nginx-1.16.1/html;
}
location / {
proxy_set_header Host $host;
proxy_pass http://gulimall;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
Nginx配置实例
location语句块
location / {
proxy_set_header Host $host;
proxy_pass http://gulimall;
}
location xxx {}
xxx为
- = :严格匹配路径
- ~ : 包含正则表达式,区分大小写
- ~* :包含正则表达式,不区分大小写
注意:如果uri包含正则表达式,则必须有 ~或者 " ~* "打头阵。
负载均衡
nginx 实例
Nginx配置负载均衡
主配置文件:部分配置如下
http {
keepalive_timeout 65;
# 你的服务名
upstream gulimall{
ip_hash;
server 127.0.0.1:88 weight=1;
server 127.0.0.2:88 weight=1;
}
include D:/0/nginx-1.16.1/conf/conf.d/*.conf;
}
子配置文件:部分配置
server {
listen 90;
server_name gulimall.com;
location / {
proxy_set_header Host $host;
proxy_pass http://gulimall;
}
}
分配方式(策略)
轮询
权重
上面nginx实例,就是权重方式。权重值越大,服务的几率越大。
ip_hash
每个请求按ip的hash结果分配,这样每个房客固定访问一个后端服务器,可以解决session的问题。
fair(第三方)
动静分离
server {
listen 90;
server_name gulimall.com;
location /static/ {
root D:/0/nginx-1.16.1/html;
}
}
Nginx 原理与优化参数
master-worker
首先:对于每个worker进程来说,独立的进程,不需要加锁。
Nginx同redis类似都采用了IO多路复用机制,每个worker都是一个独立的进程,但每一个进程里只有一个主线程,通过异步非阻塞的方式来处理请求,即使是千万个请求也不在话下。