Web基础②nginx搭建与配置

目录

一.Nginx概述

1.定义

2.Nginx模块作用

(1)main模块

(2)stream服务模块

(3)邮件服务模块

(4)第三方模块

(5)events模块

(6)http模块

(7)location模块

(8)server模块

(9)auth_basic模块

(10)gzip模块

(11)proxy模块

(12)ssl模块

3.Nginx三大作用

(1)反向代理

(2)正向代理

(3)负载均衡

[① 轮询(默认调度算法)](#① 轮询(默认调度算法))

[② 加权轮询](#② 加权轮询)

[③ ip_hash(IP哈希)](#③ ip_hash(IP哈希))

[④ 最少连接数 least_conn](#④ 最少连接数 least_conn)

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

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

二.Nginx与Apache的差异

三.Nginx安装

1.编译安装

(1)关闭防火墙,将安装nginx所需软件包传到/opt目录下

​编辑(2)安装依赖包

[(3)创建运行用户、组(Nginx 服务程序默认以 nobody 身份运行,建议为其创建专门的用户账号,以便更准确地控制其访问权限)](#(3)创建运行用户、组(Nginx 服务程序默认以 nobody 身份运行,建议为其创建专门的用户账号,以便更准确地控制其访问权限))

(4)编译安装nginx

(5)建议软链接

(6)创建Nginx自启动文件

(7)重新加载配置、设置开机自启并开启服务

2.yum安装

四.Nginx信号

五.Nginx核心配置指令

1.访问状态统计配置

(1)查看已安装的Nginx是否包含http_stub_status模块

(2)修改nginx.conf配置文件,指定访问位置并添加stub_status配置(修改之前进行备份)

(3)重启服务后进行访问测试

2.基于授权的访问控制

(1)生成用户密码认证文件

(2)修改主配置文件相应的目录,添加认证配置

(3)检查错误,重启服务进行访问测试

3.基于客户端访问控制

(1)在主配置文件中添加控制规则

(2)重启服务

(3)被拒绝客户机访问

4.基于域名的nginx虚拟主机

(1)为虚拟主机提供域名和IP映射

(2)为虚拟主机准备网页文档

(3)还原nginx主配置文件

(4)修改主配置文件

(5)重启nginx后进行访问测试


一.Nginx概述

1.定义

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

2.Nginx模块作用

(1)main模块

全局配置模块,所有模块都要执行遵守(配置运行nginx服务器的用户(组)、worker_process数(进程)、nginx进程PID存放路径、错误日志存放路径、配置文件的引入等)

(2)stream服务模块

实现反向代理功能,包括TCP协议代理

(3)邮件服务模块

主要用于支持Nginx的邮件服务(对 POP3 协议、 IMAP 协议和 SMTP协议的支持)

(4)第三方模块

二次开发,为了扩展Nginx服务器应用,完成开发者自定义功能(对 POP3 协议、 IMAP 协议和 SMTP协议的支持)

(5)events模块

影响nginx服务器与用户的网络连接

events {                                #events模块设置

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

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

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

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

}
(6)http模块

跟web服务相关,主要用于扩展标准的 HTTP 功能,让 Nginx 能处理一些特殊的服务,包含几个子模块(自定义服务日志、允许sendfile方式传输文件、连接超时时间、单连接请求数上限、Flash 多媒体传输 、解析 GeoIP 请求、 网络传输压缩 、 安全协议 SSL 支持等)

(7)location模块

uri网址定位

(8)server模块

服务模块(配置80端口监听、虚拟主机、DNS域名解析等)

(9)auth_basic模块

对网页设置用户名密码

(10)gzip模块

压缩

(11)proxy模块

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

(12)ssl模块

https加密

3.Nginx三大作用

(1)反向代理

在服务端 配置,客户端 访问服务器A ,服务器A 为代理服务器 ,将客户服务再转发到服务器B

作用:缓存,将服务器的响应缓存在自己的内存中,减少服务器压力;负载均衡,将用户请求分配给多个服务器;访问控制

(2)正向代理

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

作用:提高访问速度;隐藏客户端真实IP地址

(3)负载均衡

分摊到多个操作单元上进行执行,例如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;
}

二.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.支持热部署,支持在线升级

三.Nginx安装

1.编译安装

(1)关闭防火墙,将安装nginx所需软件包传到/opt目录下
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
 
# 将压缩包传入到/opt目录下
cd /opt
wget http://nginx.org/download/nginx-1.18.0.tar.gz
(2)安装依赖包
yum -y install gcc pcre-devel openssl-devel zlib-devel openssl  openssl-devel
(3)创建运行用户、组(Nginx 服务程序默认以 nobody 身份运行,建议为其创建专门的用户账号,以便更准确地控制其访问权限)
useradd -M -s /sbin/nologin nginx
(4)编译安装nginx
tar xf nginx-1.18.0.tar.gz 
cd nginx-1.18.0/
mkdir /apps/nginx -p
 
./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 -j2 && make install
 
chown -R nginx.nginx /apps/nginx
(5)建议软链接
ln -s /apps/nginx/sbin/nginx /usr/sbin/
(6)创建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
(7)重新加载配置、设置开机自启并开启服务
systemctl daemon-reload          #重新加载配置
systemctl enable --now nginx     #开机自启并立即启动
systemctl status nginx.service   #查看服务状态(验证)

2.yum安装

Centos7 需要安装epel源
 
cd /etc/yum.repos.d
vim epel.repo
[epel]
name=epel
baseurl=https://mirrors.aliyun.com/epel/$releasever/x86_64
gpgcheck=0
 
yum install -y epel-release
 
yum install nginx -y

四.Nginx信号

nginx -h      
#查询nginx信号使用规则

常用信号:

|---------------------------|---------------------|
| 信号 | 解释 |
| nginx -v | 显示版本 |
| nginx -V | 显示编译详细情况、模块等信息 |
| nginx -t | 检查语法格式 |
| nginx -T | 打印当前配置 |
| nginx -s | 发送信号 |
| nginx -s stop | 立即关闭 |
| nginx -s quit | 优雅退出,不影响业务的状态下退出 |
| nginx -s reload | 重新加载配置文件 |
| nginx -s USR1 | 分割日志 |
| nginx -s USR2 | 优雅升级 |
| nginx -g 'user zhangsan;' | 以张三身份运行,默认是以nginx身份 |
| nginx -g 'daemon off;' | 前台运行命令 |

五.Nginx核心配置指令

1.访问状态统计配置

(1)查看已安装的Nginx是否包含http_stub_status模块
cd /usr/local/nginx/sbin
#根据安装路径自由修改/apps/nginx/sbin也可
nginx -V
(2)修改nginx.conf配置文件,指定访问位置并添加stub_status配置(修改之前进行备份)
cd /usr/local/nginx/conf/              #/apps/nginx/conf同理
cp nginx.conf nginx.conf.bak           #备份
vim nginx.conf
 
    server {
        listen       80;
        server_name  www.clj.com;
 
        charset utf-8;
 
        #access_log  logs/host.access.log  main;
 
        location / {
            root   html;
            index  index.html index.htm;
        }
        ##添加 stub_status 配置
        location /status {				##访问位置为/status
            stub_status on;				##打开状态统计功能
            access_log off;				##关闭此位置的日志记录
        }
(3)重启服务后进行访问测试
systemctl restart nginx.service

浏览器访问 http;//192.168.227.100/status

Active connections ∶ 表示当前的活动连接数;

server accepts handled requests∶表示已经处理的连接信息,三个数字依次表示已处理的连接数、成功的TCP握手次数已处理的请求数。

可curl http∶//192.168.79.210/status 结合 awk与if 语句进行性能监控。

2.基于授权的访问控制

(1)生成用户密码认证文件
yum install -y httpd-tools
#安装工具
 
htpasswd -c /usr/local/nginx/passwd.db zhangsan
#生成用户密码认证文件(注意路径
 
chown nginx /usr/local/nginx/passwd.db 
chmod 400 /usr/local/nginx/passwd.db
#修改属性和赋予执行权限
(2)修改主配置文件相应的目录,添加认证配置
vim /usr/local/nginx/conf/nginx.conf
#路径/apps/nginx/conf/nginx.conf
 
 location / {
            root   html;
            index  index.html index.htm;
            #添加认证配置
            auth_basic "secret";					#设置密码提示框文字信息
            auth_basic_user_file /usr/local/nginx/passwd.db;
        }
(3)检查错误,重启服务进行访问测试

3.基于客户端访问控制

访问控制规则如下:

deny IP/IP段:拒绝某个IP或IP段的客户端访问。

allow IP/IP段:允许某个IP或IP段的客户端访问。

规则从上往下执行,如果匹配到则停止,不会再往下继续匹配。

(1)在主配置文件中添加控制规则
vim /usr/local/nginx/conf/nginx.conf
#注意路径/apps/nginx/conf/nginx.conf
 
        location / {
            root   html;
            index  index.html index.htm;
            auth_basic "secret";
            auth_basic_user_file /usr/local/nginx/passwd.db;
            
            # 添加控制规则
            deny 192.168.80.77;					#拒绝访问的客户端IP
            allow all;							#允许其他所有客户端访问
        }
(2)重启服务
(3)被拒绝客户机访问

4.基于域名的nginx虚拟主机

(1)为虚拟主机提供域名和IP映射
echo "192.168.79.100 www.666.com www.6668.com" >> /etc/hosts
(2)为虚拟主机准备网页文档
mkdir -p /var/www/html/666/
mkdir -p /var/www/html/6668/
echo "<h1>www.666.com</h1>" > /var/www/html/666/index.html
echo "<h1>www.6668.com</h1>" > /var/www/html/6668/index.html
(3)还原nginx主配置文件
cd /usr/local/nginx/conf           #/apps/nginx/conf路径同理 
cp nginx.conf.bak nginx.conf       #还原主配置文件
(4)修改主配置文件
vim /usr/local/nginx/conf/nginx.conf
#/apps/nginx/conf/nginx.conf同理
 
    server {
        listen       80;
        server_name  www.6668.com;						#设置域名			
        charset utf-8;									#设置网页字符集
        access_log  logs/6668.com.access.log;			#设置日志名
        location / {
            root   /var/www/html/6668;					#设置www.bxb.com的工作目录
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
    server {
        listen       80;			
        server_name  www.666.com;						#设置域名
        charset utf-8;									#设置网页字符集
        access_log  logs/666.com.access.log;			#设置日志名
        location / {
            root   /var/www/html/666;					#设置www.bxb.com的工作目录
            index  index.html index.htm;
        }
(5)重启nginx后进行访问测试
systemctl restart nginx.service
curl www.666.com
curl www.6668.com 
相关推荐
丶21364 分钟前
【Nginx】在 Docker 上安装 Nginx 的详细指南
运维·nginx·docker
danplus19 分钟前
node发送邮件:如何实现Node.js发信功能?
服务器·node.js·外贸开发信·邮件群发·蜂邮edm邮件营销·邮件接口·营销邮件
神即道 道法自然 如来20 分钟前
Jenkins怎么设置每日自动执行构建任务?
运维·jenkins
BeyondESH32 分钟前
Linux线程同步—竞态条件和互斥锁(C语言)
linux·服务器·c++
wn53134 分钟前
【Go - 类型断言】
服务器·开发语言·后端·golang
hanniuniu1334 分钟前
详细解读,F5服务器负载均衡的技术优势
运维·服务器·负载均衡
鱼饼6号1 小时前
Prometheus 上手指南
linux·运维·centos·prometheus
PatrickYao04221 小时前
记一次安装discuz时遇到的错误
服务器
小宋10213 小时前
玩转RabbitMQ声明队列交换机、消息转换器
服务器·分布式·rabbitmq
m0_609000423 小时前
向日葵好用吗?4款稳定的远程控制软件推荐。
运维·服务器·网络·人工智能·远程工作