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 
相关推荐
sun0077006 小时前
ubuntu增加swap交换空间
linux·运维·服务器
苹果醋36 小时前
前端面试之九阴真经
java·运维·spring boot·mysql·nginx
Diamond技术流6 小时前
从0开始学习Linux——环境变量详解
linux·服务器·学习·centos·软件安装·环境变量
疯狂吧小飞牛6 小时前
openssl颁发包含主题替代名的证书–SAN
运维·服务器·网络
疯狂吧小飞牛6 小时前
openssl创建自签名证书
linux·服务器·ssl
qhd吴飞7 小时前
在linux下用二进制方式安装mysql8
linux·运维·服务器
刘登辉7 小时前
雷电模拟器charles代理抓包
运维·服务器
股票GPT分析7 小时前
《Python 股票交易分析:开启智能投资新时代》(二)
大数据·服务器·python·c#·fastapi
Wang's Blog7 小时前
RocketMQ: Broker 使用指南
服务器·网络·rocketmq
藤原拓远7 小时前
二.LoadBalancer负载均衡服务调用(1)
运维·负载均衡