Nginx (engine x)是一个高性能
的Web服务器和反向代理服务器
,也可以作为邮件代理服务器。
Nginx是免费开源的,采用C语言开发编写的,同时 Nginx也有收费的商业版本,商业版本提供了性能优化﹑宕机等紧急问题处理等技术支持和服务。
反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器;
正向代理类似一个跳板机,代理访问外部资源。比如:我是一个用户,我访问不了某网站,但是我能访问一个代理服务器,这个代理服务器,它能访问那个我不能访问的网站,于是我先连上代理服务器,告诉它我需要那个无法访问网站的内容,代理服务器去取回来,然后返回给我。()
官方开源地址:http://nginx.org/
gcc 编译器是否安装
检查是否安装: yum list installed |grep gcc
执行安装: yum install gcc -y
openssl库是否安装
查看是否安装:yum list installed | grep openssl
执行安装: yum install openssl openssl-devel -y
pcre 库是否安装
查看是否安装:yum list installed | grep pcre
执行安装: yum install pcre pcre-devel -y
zlib 库是否安装
查看是否安装:yum list installed | grep zlib
执行安装: yum install zlib zlib-devel -y
一次性安装,执行如下命令
上边需要安装四次真的有些麻烦,下边这条命令直接一次安装多个,如果已经安装就会跳过,没有安装就按执行安装。
yum install gcc openssl openssl-devel pcre pcre-devel zlib zlib-devel -y
tar -zxvf nginx-1.20.2.tar.gz
使用配置安装 指定安装的位置为/usr/local/nginx
在nginx主目录下执行
./configure --prefix=/usr/local/nginx
编译
make
安装
make install
安装成功
通过配置文件启动
./nginx -c /usr/local/nginx/conf/nginx.conf
或
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
-c 是指定配置文件,而且配置文件路径必须指定绝对路径
检查Nginx是否启动
通过查看进程查看: ps -ef |grep nginx
nginx 体系结构由master进程
和其worker进程
组成
master进程读取配置文件,并维护worker进程,而worker进程则对请求进行实际处理。
修改配置后需要重启服务(杀死进程,启动服务)
./nginx -s reload
当修改 Nginx配置文件后,可以使用Nginx命令进行配置文件语法检查
,用于检查Nginx配置文件是否正确
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf -t
Nginx版本号,编辑器版本和配置参数
/usr/local/nginx/sbin/nginx -V
#配置worker进程运行用户 nobody也是一个linux用户,一般用于启动程序,没有密码
#user nobody;
#配置工作进程数目,根据硬件调整,通常等于CPU数量或者2倍于CPU数量
worker_processes 1;
#配置全局错误日志及类型,【debug | info | notice | warn | error | crit】
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid; #配置进程pid文件
#配置工作模式和连接数
events {
worker_connections 1024; #配置每个worker进程连接数上限(65535),nginx支持的总连接数就等于worker_processes * worker_connections
}
#配置http服务器,利用它的反向代理功能提供负载均衡支持
http {
#配置nginx支持哪些多媒体类型,可以在conf/mime.types查看支持哪些多媒体类型
include mime.types;
#默认文件类型 流类型, 可以理解为支持任意类型
default_type application/octet-stream;
#配置日志格式
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#配置access.log 日志及存放路径,并使用上面定义的main日志格式
#access_log logs/access.log main;
sendfile on; #开启高效文件传输模式
#tcp_nopush on; #防止网络阻塞
#keepalive_timeout 0;
keepalive_timeout 65; #长连接超时时间,单位是秒
#gzip on; #开启gzip压缩输出
#配置虚拟主机
server {
listen 80; #配置监听端口
server_name localhost; #配置服务名称
#charset koi8-r; #配置字符集
#access_log logs/host.access.log main; #配合本虚拟主机的访问日志
#默认的匹配斜杠/的请求,当访问路径中有斜杠/,会被该localhost匹配到并进行处理
location / {
#root是配置服务器的默认网站根目录位置,默认为nginx安装主目录下的html目录
root html;
#配置首页文件名称
index index.html index.htm;
}
#error_page 404 /404.html; #配置404页面
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html; #配置50x错误页面
#精准匹配
location = /50x.html {
root html;
}
}
负载均衡
动静分离
Nginx是一个HTTP的web服务器,可以将服务器上的静态文件(如HTML、图片等)通过HTTP协议返回给浏览器客户端
location /ace {
#root是配置服务器的默认网站根目录位置,默认为nginx安装主目录下的html目录
root /opt/www; #资源放在/opt/www/ace目录下才能访问
#配置首页文件名称
index index.html;
}
重启nginx服务
/usr/local/nginx/sbin/nginx -s reload
在浏览器上输入http:192.168.0.128:80/进行访问欢迎界面
在浏览器上输入http:192.168.0.128:80/ace进行访问部署的静态资源
在网站创立初期,我们一般都使用单台机器对外提供集中式服务。随着业务量的增大,我们一台服务器不够用,此时就会把多台机器组成一个集群对外提供服务,但是,我们网站对外提供的访问入口通常只有一个,比如www.web.com。那么当用户在浏览器输入www.web.com进行访问的时候,如何将用户的请求分发到集群中不同的机器上呢,这就是负载均衡要做的事情。
负载均衡通常是指将请求"均匀"分摊到集群中多个服务器节点上执行,这里的均匀是指在一个比较大的统计范围内是基本均匀
的,并不是完全均匀。
Nginx通过在nginx.conf文件进行配置即可实现负载均衡
#gzip on;
upstream www.myweb.com{
server 192.168.0.128:8081;
server 192.168.0.128:8082;
}
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
location /myweb {
proxy_pass http://www.myweb.com;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
其中weight表示权重,用于后端服务器性能不均匀的情况,访问比率约等于权重之比,权重越大访问机会越多
upstream是配器nginx与后端服务器负载均衡非常重要的一个模块
,并且它还能对后端的服务器的健康状态进行检查,若后端服务器中的一台发生故障,则前端的请求不会转发到该故障的机器。
注意:这里的轮询并不是每个请求轮流分配到不同的后端服务器,与ip_hash类似,但是按照访问url的hash结果来分配请求,使得每个url定向到同一个后端服务器,主要应用于后端服务器为缓存时的场景下。如果后端服务器down掉,将自动剔除。
应用于后端服务器性能均匀的情况
每个请求按一定比例分发到不同的后端服务器,weight值越人访回的比例越大,用于后端服务器性能不均的情况,根据服务器的性能分配不同的权重,交替访问。
ip_hash也叫IP绑定,每个请求按访问ip的hash值分配,这样每个访问客户端会固定访问一个后端服务器,可以解决会话session丢失的问题
假设我们又两台服务器,那就是ip的hash值对2取模,得到的值是0或1,就去请求服务器0或者服务器1。
ip不变→ip对应的hash值不变→对2取模的值不变→请求的服务器不变
算法: hash(“124.207.55.82”)%2=0,1
web请求会被转发到连接数最少的服务器上。
upstream backserver{
server 192.168.0.128:8081;
#其它所有的非backup机器down的时候,才请求backup
server 192.168.0.128:8082 backup;
}
upstream backserver{
server 192.168.0.128:8081;
#down 表示当前的server是down状态,不参与负载均衡
server 192.168.0.128:8082 down;
}
一般在项目上线的时候,可以分配部署不同的服务器上,然后对Nginx重新reload。reload不会影响用户的访问,或者可以给一个提示页面,系统正在升级。
方式一 在nginx.conf 的location中配置静态资源的后缀
例如:当访问静态资源,则从linux服务器/opt/static目录下获取(举例)
方式二 在nginx.conf的location中配置静态资源所在目录实现
Nginx的负载均衡和静态代理结合在一起,我们可以实现动静分离,这是实际应用中常风的一种场景。
动态资源,如jsp由tomcat或其他web服务器完成
静态资源,如图片、css、js等由nginx,服务器完
它们各司其职,专注于做自己擅长的事情
动静分离充分利用了它们各自的优势,从而达到更高效合理的架构