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

查看

相关推荐
pen-ai14 分钟前
【SQL】一文速通SQL
数据库·sql
gsls2008081 小时前
docker打包nginx版wordpress
nginx·docker·wordpress
DC_BLOG2 小时前
Mysql-DDL语句
服务器·数据库·mysql
Yz98762 小时前
Hive基础
大数据·linux·数据仓库·hive·hadoop·bigdata
努力遇见美好的生活2 小时前
Mysql每日一题(行程与用户,困难※)
android·数据库·mysql
卫生纸不够用3 小时前
远程链接mysql步骤
数据库·mysql
raysync8883 小时前
镭速大文件传输软件向金融银行的文档管理提供高效的解决方案
服务器·网络·金融
.Ayang3 小时前
文件上传漏洞
网络·计算机网络·安全·web安全·网络安全·系统安全·网络攻击模型
夏小花花3 小时前
postgresql 创建序列
数据库·postgresql
Allen Bright3 小时前
Redis介绍
数据库·redis·缓存