Nginx的搭建与核心配置

目录

[1 Nginx概述](#1 Nginx概述)

[1.1 Nginx模块与作用](#1.1 Nginx模块与作用)

[1.2 Nginx三大作用(反向代理、负载均衡、动静分离)](#1.2 Nginx三大作用(反向代理、负载均衡、动静分离))

[2 Nginx和Apache对比](#2 Nginx和Apache对比)

[2.1 Nginx和Apache的差异](#2.1 Nginx和Apache的差异)

2.2Nginx和Apache的优缺点比较

[3 安装及使用Nginx](#3 安装及使用Nginx)

[3.1 编译安装nginx](#3.1 编译安装nginx)

[3.2 启动停止nginx](#3.2 启动停止nginx)

[3.3 创建Nginx 自启动文件](#3.3 创建Nginx 自启动文件)

[4 平滑升级及信号使用](#4 平滑升级及信号使用)

[4.1 信号](#4.1 信号)

[4.1.1 显示版本](#4.1.1 显示版本)

[4.1.2显示编译详细情况 模块等信息](#4.1.2显示编译详细情况 模块等信息)

4.1.3发送信号

[4.1.4 指定配置 不已配置文件中的为准](#4.1.4 指定配置 不已配置文件中的为准)

[4.1.5 检查语法格式](#4.1.5 检查语法格式)

[4.2升级 nginx1.18 nginx1.20](#4.2升级 nginx1.18 nginx1.20)


1 Nginx概述

  • 一款高新能、轻量级Web服务软件
  • 稳定性高
  • 系统资源消耗低
  • 对HTTP并发连接的处理能力高
  • 单台物理服务器可支持30 000~50 000个并发请求。

1.1 Nginx模块与作用

**main模块:**全局配置模块,所有模块都要执行遵守

配置运行nginx服务器的用户(组)、worker_process数(进程)、nginx进程PID存放路径、错误日志存放路径、配置文件的引入等
**stream服务模块:**实现反向代理功能,包括TCP协议代理

邮件服务模块:主要用于支持 Nginx 的邮件服务

对 POP3 协议、 IMAP 协议和 SMTP协议的支持
**第三方模块:**二次开发,为了扩展 Nginx 服务器应用,完成开发者自定义功能

Json 支持、 Lua 支持等

events模块:影响nginx服务器与用户的网络连接

events { #events模块设置

woker_connections 65536; #设置单个工作进程最大并发连接数

use epoll; #事件驱动类型选择为epoll

accept_mutex on; #同一时刻一个请求轮流由work进程除了,即轮询

multi_accept on; #每个工作进程同时接受多个网络连接

}
**http模块:**跟web服务相关,主要用于扩展标准的 HTTP 功能,让 Nginx 能处理一些特殊的服务,包含几个子模块

自定义服务日志、允许sendfile方式传输文件、连接超时时间、单连接请求数上限、Flash 多媒体传输 、解析 GeoIP 请求、 网络传输压缩 、 安全协议 SSL 支持等

location模块:uri网址定位

server模块:服务模块

配置80端口监听、虚拟主机、DNS域名解析等

auth_basic模块:对网页设置用户名密码

gzip模块:压缩

proxy模块:设置后端IP地址、端口号及http和加密的https

ssl模块:https加密

1.2 Nginx三大作用(反向代理、负载均衡、动静分离)

**1. 反向代理:**在服务端 配置,客户端 访问服务器A ,服务器A 为代理服务器 ,将客户服务再转发到服务器B

**作用:**缓存,将服务器的响应缓存在自己的内存中,减少服务器压力;

负载均衡,将用户请求分配给多个服务器;

访问控制

正向代理:在客户端 配置,配置完了再去访问具体服务,即代理服务器 代理了客户端 ,再去和目标服务器 进行交互

作用:提高访问速度

隐藏客户端真实IP地址

**2. 负载均衡:**分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务

nginx七层负载均衡调度算法(六种)

①询(默认调度算法)

特点:每个请求按时间顺序逐一分配到不同的后端服务器处理。

适用业务场景:后端服务器硬件性能配置完全一致,业务无特殊要求时使用。

upstream backendserver {
server 192.168.0.14:80 max_fails=2 fail_timeout=10s;
server 192.168.0.15:80 max_fails=2 fail_timeout=10s;
}

②加权轮询

特点:指定轮询几率,weight值(权重)和访问比例成正比,用户请求按权重比例分配。

适用业务场景:用于后端服务器硬件性处理能力不平均的情形。

upstream backendserver {
server 192.168.0.14:80 weight=5 max_fails=2 fail_timeout=10s;
server 192.168.0.15:80 weight=10 max_fails=2 fail_timeout=10s;
}

③ip_hash(IP哈希)

特点:每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session会话保持问题。

适用业务场景:适用于需要账号登录的系统,会话连接保持的业务。

upstream backendserver {
ip_hash;
server 192.168.0.14:80 max_fails=2 fail_timeout=10s;
server 192.168.0.15:80 max_fails=2 fail_timeout=10s;
}

④最少连接数 least_conn

特点:按nginx反向代理与后端服务器之间的连接数,连接数最少的优先分配。

适用业务场景:适用于客户端与后端服务器需要保持长连接的业务。

upstream backendserver {
least_conn; server 192.168.0.14:80 max_fails=2 fail_timeout=10s;
server 192.168.0.15:80 max_fails=2 fail_timeout=10s;
}

⑤响应时间 fair(需编译安装第三方模块 ngx_http_upstream_fair_module)

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

适用业务场景:对访问响应速度有一定要求的业务。

upstream backendserver {
fair;
server 192.168.0.14:80 max_fails=2 fail_timeout=10s;
server 192.168.0.15:80 max_fails=2 fail_timeout=10s;
}

⑥url_hash(URL分配 )(需编译安装第三方模块 ngx_http_upstream_hash_module)

特点:按访问url的hash结果来分配请求,使同一个url访问到同一个后端服务器。

适用业务场景:适用于后端服务器为缓存服务器时比较有效。

upstream backendserver {
server 192.168.0.14:80 max_fails=2 fail_timeout=10s;
server 192.168.0.15:80 max_fails=2 fail_timeout=10s;
hash $request_uri;
}

**3. 动静分离:**采用代理的方式,在server{}段中加入带正则匹配的location来指定匹配项针对PHP的动静分离:静态页面交给Nginx处理,动态页面交给PHP-FPM模块或Apache处理。

在Nginx的配置中,是通过location配置段配合正则匹配实现静态与动态页面的不同处理方式,通过使用Nginx提高网站的响应速度,优化用户体验

2 Nginx和Apache对比

2.1 Nginx和Apache的差异

Apache: 同步多进程模型:一个连接对应一个进程(高稳定)

  1. rewrite更强大(rewrite主要功能是实现统一资源定位符URL的跳转)
  2. 模块多,基本想到的都可以找到
  3. 少bug,更加稳定(nginx相对较多)
  4. PHP支持比较简单(nginx需要配合其他后端用)
  5. 处理动态请求更有优势(nginx更适合静态与反向)

Nginx: 异步非阻塞模型:多个连接(万级别)对应一个进程(高性能)

  1. 轻量级,采用C编写,占用更少的内存与资源
  2. 抗并发/高并发,以epoll and kqueue 作为开发模型,负载能力高,高并发下能够保持低资源低消耗高性能(apache在PHP处理慢或前端压力很大时,容易出现进程数飙升从而拒绝服务)
  3. 处理静态文件好,静态处理性能比apache高三倍以上
  4. 设计高度模块化,编写模块相对简单
  5. .配置简洁,正则配置更简单,且更改完可以使用 -t 测试(apache配置复杂,重启时发现出错,会很崩溃)
  6. 作为负载均衡服务器,支持七层负载均衡,可以有效防止ddos攻击
  7. 本身是一个反向代理服务器,也可以作为邮件代理服务器使用
  8. 支持热部署,支持在线升级

2.2Nginx和Apache的优缺点比较

nginx相对于apache的优点∶

  • 轻量级,同样起web服务,比Apache占用更少的内存及资源。
  • 高并发,Nginx处理请求是异步非阻塞的,而Apache是阻塞型的在高并发下,Nginx能保持低资源低消耗高性能。
  • 高度模块化的设计。
  • 编写模块相对简。
  • 社区活跃,各种高性能模块出品速度

apache相对于nginx的优点∶

  • 3rewrite比nginx的rewrite强大
  • 模块多,基本想到的都可以找到
  • 少bug, Nginx的bug相对较超稳定
  • 存在就是理由,一般来说,需要性能的web服务,用Nginx。如果不需要性能只求稳定,那就Apache。Nginx处理动态请求是弱项,一般动态请求要Apache去做,Nginx只适处理静态网页或反向代理。

3 安装及使用Nginx

3.1 编译安装nginx

安装依赖包

yum -y install gcc pcre-devel openssl-devel zlib-devel openssl  openssl-devel 
#安装依赖包   

新建nginx用户便于管理

useradd -M -s /sbin/nologin nginx

下载安装包

wget http://nginx.org/download/nginx-1.18.0.tar.gz

解压安装包

./configure --help

#查看帮助模块

./configure --prefix=/apps/nginx \

--user=nginx \

--group=nginx \

--with-http_ssl_module \

--with-http_v2_module \

--with-http_realip_module \

--with-http_stub_status_module \

--with-http_gzip_static_module \

--with-pcre \

--with-stream \

--with-stream_ssl_module \

--with-stream_realip_module

make

make install

安装好后生成四个文件功能如下

  1. conf:保存nginx所有的配置文件,其中nginx.conf是nginx服务器的最核心最主要的配置文件,其他的.conf则是用来配置nginx相关的功能的,例如fastcgi功能使用的是fastcgi.conf和fastcgi_params两个文件,配置文件一般都有个样板配置文件,是文件名.default结尾,使用的使用将其复制为并将default去掉即可。

  2. html目录中保存了nginx服务器的web文件,但是可以更改为其他目录保存web文件,另外还有一个50x的web文件是默认的错误页面提示页面。

  3. logs:用来保存nginx服务器的访问日志错误日志等日志,logs目录可以放在其他路径,比如/var/logs/nginx里面。

  4. sbin:保存nginx二进制启动脚本,可以接受不同的参数以实现不同的功能。

修改权限

chown -R nginx.nginx /apps/nginx

3.2 启动停止nginx

启动

/apps/nginx/sbin/nginx  ##绝对路径启动

ps : ln -s /apps/nginx/sbin/nginx /usr/sbin/ ##创建软连接后直接 nginx启动

停止

killall  nginx  ##停止nginx服务

3.3 创建Nginx 自启动文件

建立文件

vim /usr/lib/systemd/system/nginx.service

[Unit]
Description=nginx - high performance web server
Documentation=http://nginx.org/en/docs/
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target
[Service]
Type=forking
PIDFile=/apps/nginx/logs/nginx.pid  
#注意文件位置,如果不对 启动不了
ExecStart=/apps/nginx/sbin/nginx -c /apps/nginx/conf/nginx.conf
#注意启动文件位置
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID
[Install]
WantedBy=multi-user.target

如果需要修改pid文件可以执行以下操作

#创建目录

vim /apps/nginx/conf/nginx.conf

#修改配置文件

pid /apps/nginx/run/nginx.pid;

#找到 pid的位置修改

重新加载配置

systemctl daemon-reload 

开机自启并立即启动

如果卡主是应为logs下有 nginx.pid 文件 删除即可

systemctl enable --now nginx

4 平滑升级及信号使用

4.1 信号

nginx 命令支持向其发送信号,实现不同功能

nginx 当做单独命令使用有以下选项

4.1.1 显示版本

nginx -v (小写)

4.1.2显示编译详细情况 模块等信息

nginx -V (大写)

4.1.3发送信号

kill -l 看信号大全

nginx -h 中可以看到的信号较少

nginx -s stop #立即关闭nginx

nginx -s quit #优雅退出 不影响业务的状态下退出

nginx -s reload #重新加载

4.1.4 指定配置 不已配置文件中的为准

nginx -g 指定配置 不已配置文件中的为准

nginx -g 'cyw;' 已张三身份运行,默认是以nginx身份

nginx -g 'daemon off;' 前台运行命令

4.1.5 检查语法格式

nginx -t

4.2升级 nginx1.18 nginx1.20

  1. 将旧Nginx文件换成新Nginx文件(注意备份)

  2. 向master进程发送USR2信号

  3. master进程修改pid文件名,加后缀.oldbin

  4. master进程用新Nginx文件启动新master进程,系统中将有新旧两个Nginx主进程共同提供Web服务

  5. 向旧的Nginx服务进程发送WINCH信号,使旧的Nginx worker进程平滑停止,并删除Nginx.pid.oldbin文件

  6. 向旧master进程发送QUIT信号,关闭老master

  7. 如果发现升级有问题,可以回滚向老master发送HUP,向新master发送QUIT

重新加载配置文件

wget https://nginx.org/download/nginx-1.20.2.tar.gz -P /usr/local/src/
#下载安装包到src目录

解压并重新编译安装

如果有新模块在后添加即可

添加新模块

./configure --prefix=/apps/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre --with-stream --with-stream_ssl_module --with-stream_realip_module

重新编译

注意不要执行 make install

查看

相关推荐
阳冬园3 分钟前
mysql数据库 主从同步
数据库·主从同步
7yewh4 分钟前
嵌入式Linux QT+OpenCV基于人脸识别的考勤系统 项目
linux·开发语言·arm开发·驱动开发·qt·opencv·嵌入式linux
Arenaschi8 分钟前
在Tomcat中部署应用时,如何通过域名访问而不加端口号
运维·服务器
小张认为的测试8 分钟前
Linux性能监控命令_nmon 安装与使用以及生成分析Excel图表
linux·服务器·测试工具·自动化·php·excel·压力测试
waicsdn_haha16 分钟前
Java/JDK下载、安装及环境配置超详细教程【Windows10、macOS和Linux图文详解】
java·运维·服务器·开发语言·windows·后端·jdk
打鱼又晒网17 分钟前
linux网络套接字 | 深度解析守护进程 | 实现tcp服务守护进程化
linux·网络协议·计算机网络·tcp
okok__TXF24 分钟前
Nginx + Lua脚本打配合
nginx·lua
良许Linux30 分钟前
0.96寸OLED显示屏详解
linux·服务器·后端·互联网
青灯文案131 分钟前
前端 HTTP 请求由 Nginx 反向代理和 API 网关到后端服务的流程
前端·nginx·http
蜜獾云41 分钟前
docker 安装雷池WAF防火墙 守护Web服务器
linux·运维·服务器·网络·网络安全·docker·容器