nginx介绍及搭建

架构模型

Nginx是由一个master管理进程、多个worker进程组成的多进程模型。master负责管理worker进程,worker进程负责处理网络事件,整个框架被设计为一种依赖事件驱动、异步、非阻塞的模式。
优势:

1、充分利用多核,增强并发处理能力;

2、多worker间可以实现负载均衡;

3、Master统管worker行为:在worker异常后,可以主动拉起worker进程,从而提升了系统的可靠性。并且由Master进程控制服务运行中的程序升级、配置项修改等操作,从而增强了整体的动态可扩展与热更的能力;

安装

yum方式

powershell 复制代码
yum install -y nginx
#查看是否安装成功
pcre-config --version
systemctl start nginx && systemctl enable nginx
#检查服务
ps -ef | grep nginx        
netstat -ntlp | grep 80
powershell 复制代码
#检查配置文件
nginx -t
systemctl restart nginx 
systemctl start nginx 
systemctl stop nginx 

编译方式

powershell 复制代码
wget http://nginx.org/download/nginx-1.22.0.tar.gz
tar -zxvf nginx-1.22.0.tar.gz

/下载路径/configure --prefix=/安装路径

#下载依赖
yum -y install gcc openssl openssl-devel pcre-devel zlib zlib-devel      
make && make install 
# 启动服务
/安装路径/sbin/nginx
powershell 复制代码
#重新加载
./nginx -s reload
#服务关闭
./nginx -s stop
#服务开启
./nginx

基本配置

主配置文件/etc/nginx/nginx.conf;如果是openresty,则在/usr/local/openresty/nginx/conf/nginx.conf。

powershell 复制代码
# worker进程的数量,建议数量<=服务器的总核心数
worker_processes  4;                               
events {
# 单个worker进程并发最大连接数;
# nginx并发总链接数 = worker_processes * worker_connections,建议数量<=文件打开数
    worker_connections  256;
}
http {
# include为http模块调取的配置文件
# mime.types文件是nginx可处理的静态媒体资源类型
    include       mime.types;
# 定义默认类型,普通文本为text/plain
    default_type  application/octet-stream;
# 是否能使用sendfile()传输文件,该属性可以大大提高Nginx处理静态资源的性能
    sendfile        on;
# 链接超时时间
    keepalive_timeout  65;
    server {
# nginx服务监听端口,默认为80
        listen       80;
# 指定网址域名信息,例:www.abc.com;默认为主机地址,通过输入主机地址访问页面
        server_name  localhost; 
# url为/时
        location / {
# 指定网址站点目录
            root   html;
# 访问主页后,无对应站点时,反馈的信息,默认打开此配置文件
            index  index.html index.htm;
        }
# 错误页面,优雅显示配置模块
        error_page   500 502 503 504  /50x.html;                    
        location = /50x.html {
            root   html;
        }
    }
}

常用项

反向代理

客户端发送请求到反向代理服务器,由反向代理服务器去选择目标服务器获取数据,然后再返回到客户端。此过程客户端无法感知代理,暴露的是代理服务器地址,隐藏了真实服务器 IP 地址。

powershell 复制代码
        location / {
            echo "this is 100 / page";
        }
        location /a {
            proxy_pass http://10.0.0.101:80/;
        }
        location /b {
            proxy_pass http://10.0.0.102:80/;
        }

# proxy_pass为反向代理配置, 即流量由代理端转发至后端响应。注意结尾的/号,如果不配置会代表其他用法。

匹配规则

=:优先级最高;

^~:优先级其次,匹配以xx开头;

~ ^/\w: 优先级第三,匹配字母、数字、下划线或汉字(正则表达式)

/:优先级最低;

powershell 复制代码
  server {
        listen       80;
        server_name  localhost;
        # 需要在server配置模块中添加配置, 否则默认会下载
        default_type text/html;

        location / {
            echo "this is / page";
        }
        location = /a {
            echo "this is = /a page";
        }
        location ^~ /a {
            echo "this is ^~ /a page";
        }
        location ~ ^/\w {
            echo "this is ~ ^/\w page";
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

动静分离

nginx对静态页面的处理能力远高于tomcat,非常擅长将css、js、图片等资源以http协议的方式返回给客户端。故静态请求交由nginx,动态请求交由tomcat,提升系统吞吐量,,降低由单个服务器的压力。

powershell 复制代码
location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css)$ {
# 静态数据放入客户端的缓存,七天内有效
	    root /webapps/projectname/code/static-resource;
	    expires 7d;
	}

location / {
# 动态请求转交tomcat
	proxy_pass http://127.0.0.1:8080;
}

负载均衡

powershell 复制代码
    http:
        upstream group {
        server 10.0.0.101:80;
        server 10.0.0.102:80;
        }

    server:
        location /lb {
            proxy_pass http://group/;
        }

调度种类

轮询:每个请求按时间顺序逐一分配到不同的后端服务器;
权重:weight值越大,被访问的概率越高;

ip hash:每个请求按访问ip的hash结果分配,这样来自同一个IP的访客固定访问一个后端服务器,有效解决了动态网页存在的session共享问题;

fair:按后端服务器的响应时间来分配请求,响应时间短的优先分配;

url_hash:按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效;

几种状态

down:当前的后端server不参与负载;

weight:默认为1, 被访问的概率;

max_fails:允许请求失败的次数,默认为1。当超过最大次数时,返回proxy_next_upstream模块定义的错误 ;

fail_timeout:失败访问达到max_fails次数后,暂挂的时间。;

backup: 所有非backup后端server处于宕机或者忙的时候,转发请求到backup后端server;

nginx的主备: link

相关推荐
坚持学习前端日记41 分钟前
Nginx 搭建文件服务器
运维·服务器·nginx
徐同保2 小时前
nginx接口超时,增加接口超时时间
运维·nginx
Benny的老巢12 小时前
Mac上用XAMPP搭建局域网可访问的开发环境,让局域网内其他设备通过域名访问
nginx·macos·apache·xampp·php开发环境
岚天start17 小时前
Docker部署NGINX实现服务四层转发方案
服务器·nginx·docker
微凉的衣柜20 小时前
Windows Server 使用 Nginx 反向代理实现域名访问内网 Gradio 应用
运维·windows·nginx
上去我就QWER20 小时前
什么是反向代理?
后端·nginx
小白冲鸭1 天前
苍穹外卖-前端环境搭建-nginx双击后网页打不开
运维·前端·nginx
oMcLin1 天前
如何在 Debian 11 上配置并优化 Nginx 与 Lua 脚本,提升高并发网站的动态请求处理能力?
nginx·debian·lua
笑笑�1 天前
OpenResty + nginx_upstream_check_module 构建主动健康检查模块
运维·nginx·负载均衡·openresty
工具罗某人2 天前
docker快速部署minio
java·nginx·docker