Nginx网站服务

一、Nginx服务基础

1. Nginx 概述

Nginx ("engine x") 是一个 高性能 的 HTTP 和反向代理服务器。 Nginx 是由 Igor Sysoev 为俄
罗斯访问点开量第二的 Rambler.ru 站发的,第一个公开版本 0.1.0 发布于 2004 年 10 月 4 日。其将源 代码以类 BSD 许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而 闻 名。2011 年 6 月 1 日, Nginx 1.0.4 发布。 1.18 1.20 1.22 1.12
Nginx 是一款轻量级的 Web 服务器 / 反向代理服务器及电子邮件( IMAP/POP3 )代理服务器,
单台物理服务器 可支持 30 000 ~ 50 000 个并发请求 。并在一个 BSD-like 协议下发行。由俄罗斯的程序设 计师 Igor Sysoev 所开发,供俄国大型的入口网站及搜索引擎 Rambler (俄文: Рамблер )使用。其特 点是占有内存少,并发能力强,事实上 Nginx 的并发能力确实在同类型的网页服务器中表现较好,中国 大陆使用 Nginx 网站用户有:百度 BWS 、新浪、网易、腾讯、等。

2. Nginx 功能介绍

  • 静态的web资源服务器html,图片,js,css,txt等静态资源
  • http/https协议的反向代理 ,7层 url
  • 结合FastCGI /uWSGI/SCGI等协议反向代理动态资源请求
  • tcp/udp协议的请求转发(反向代理) 4层

3. Nginx 应用场景

① 静态服务器 (图片、视频服务、文本)

② 动态服务

③ 反向代理, 负载均衡

④ 缓存服务 

4. Nginx和Apache的差异

  • Nginx是一个甚于事件的Web服务器,Apache是一个基于流程的服务器;
  • Nginx避免子进程的概念,Apache是基于子进程的;
  • Nginx在内存消耗和连接方面更好,Apache在内存消耗和连接方面一般;
  • Nginx的性能和可伸缩性不依赖于硬件,Apache依赖于CPU和内存等硬件;
  • Nginx支持热部署,Apache不支持热部署;
  • Nginx对于静态文件处理具有更高效率,Apache相对一般;
  • Nginx在反向代理场景具有明显优势,Apache相对一般。
Nginx 相对于 Apache 的优点
轻量级,同样是 web 服务,比 Apache 占用更少的内存及资源 ;高并发, Nginx 处理请求是异步非塞的,而 Apache 则是阻塞型的,在高并发下 Nginx 能保持低资源低消耗高性能;高度模块化的设计编写模块相对简单;社区活跃,各种高性能模块出品迅速

5. Nginx 框架

上图是 Nginx 的进程模型,下面我们会简单讲解图中不同部分的含义:
既然 worker 进程之间是平等的,每个进程,处理请求的机会也是一样的。当我们提供 80 端口的 http 服务时,一个连接请求过来,每个进程都有可能处理这个连接。那么问题来了,到底最后怎样处理,是由什么决定的呢?我们来看一看一个完整的请求是怎样通过互相的协作来实现的:
1 )首先,每个 worker 进程都是从 master 进程 fork 过来,在 master 进程里面,先建立好需要
listen **socket listenfd ** 之后,然后再 fork 出多个 worker 进程。
2 )所有 worker 进程的 listenfd 会在新连接到来时变得可读,为保证只有一个进程处理该连接,所有worker 进程会在注册 listenfd 读事件前抢 accept_mutex ,抢到互斥锁的那个进程注册 listenfd
读事件,然后在读事件里调用 accept 接受该连接。(解决惊群)
3 )当一个 worker 进程在 accept 这个连接之后,就开始读取请求、解析请求、处理请求。产生数据后,再返回给客户端,最后才断开连接,这样一个完整的请求就是这样的了。

6. Nginx核心模块

  • 核心模块:是 Nginx 服务器正常运行必不可少的模块,提供错误日志记录、配置文件解析、事件驱动机制、进程管理等核心功能
  • 标准HTTP模块:提供 HTTP 协议解析相关的功能,比如:端口配置、网页编码设置、 HTTP响应头设置等等
  • 可选HTTP模块:主要用于扩展标准的 HTTP 功能,让 Nginx 能处理一些特殊的服务,比如:Flash多媒体传输、解析 GeoIP 请求、网络传输压缩、安全协议 SSL 支持等
  • 邮件服务模块:主要用于支持 Nginx 的邮件服务,包括对 POP3 协议、 IMAP 协议和 SMTP协议的支持
  • Stream服务模块: 实现反向代理功能,包括TCP协议代理四层
  • 第三方模块:是为了扩展 Nginx 服务器应用,完成开发者自定义功能,比如: Json 支持、 Lua 支持等

常用模块

ngx_http_core_module 核心模块
ngx_http_access_module 访问控制
ngx_http_auth_basic_module 身份验证
ngx_http_gzip_module 压缩模块
ngx_http_log_module 日志模块
ngx_http_proxy_module 代理模块
ngx_http_rewrite_module 重写模块
ngx_http_stub_status_module 状态页模块
ngx_http_upstream_module 反向代理
ngx_http_stream_module 四层代理

二、Nginx 安装

1. yum 安装

①、使用yum 部署 Nginx 需要先安装 epel-release 扩展包,官方源默认没有 Nginx 的 yum源。
yum install epel-release -y          //安装epel-release
②、扩展源安装完后直接安装 Nginx 。
yum install nginx -y                    //安装nginx

③使用 yum 安装的 nginx 配置文件位置在: /etc/nginx.conf 。默认根目录在: /usr/share/nginx/html
默认日志文件在: /var/log/nginx/ 路径下。

2. Nginx 编译安装

下载安装包: nginx-1.12.0.tar.gz 
在这里可以想下载你的安装包 https://nginx.org/download/nginx-1.18.0.tar.gz
wget https://nginx.org/download/nginx-1.18.0.tar.gz
https://nginx.org/download/nginx-1.20.1.tar.gz

2.1 关闭防火墙和增强功能

systemctl stop firewalld
systemctl disable firewalld
setenforce 0

将软件包传到/opt目录下

2.2 安装依赖包

#nginx 的配置及运行需要 pcre zlib 等软件包的支持,因此需要安装这些软件的开发包,以便提供相应的库和头文件。
yum -y install pcre-devel zlib-devel gcc gcc-c++ make

2.3 创建运行用户与组

# 创建运行用户、组( Nginx 服务程序默认以 nobody 身份运行,建议为其创建专门的用户账号,以便更准确地控制其访问权限)
useradd -M -s /sbin/nologin nginx

 2.4 编译安装Nginx 

tar zxvf nginx-1.18.0.tar.gz -C /opt/
yum -y install gcc pcre-devel openssl-devel zlib-devel openssl openssl-devel
./configure --help
# 查看帮助模块
./configure --prefix=/usr/local/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
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/     # 让系统识别 nginx 的操作命令
nginx -t       # 检查配置文件是否配置正确

2.5 Nginx信号

nginx -t 检查语法
nginx -T 检查语法 并打印所有配置
nginx -v 显示版本
nginx -V 显示详细信息, 包括 编译的信息
nginx -c 指定配置文件启动
nginx -s = kill 发送信号
nginx -s relaod 重新加载配置文件
nginx -s stop 停止 nginx 立即停止
nginx -s quit 优雅的退出 , 如果有人在访问我的服务, 那么不会立即关闭, 等客户断
开连接再 退出
nginx -s reopen 重新生成日志文件 USR1 日志 有关
nginx -s USR2 飞行中升级

2.6 添加Nginx系统服务

vim  /lib/systemd/system/nginx.service
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
----------------
[Unit]:  服务的说明
Description:  描述服务
After:  依赖,当依赖的服务启动之后再启动自定义的服务
[Service]  服务运行参数的设置
Type=forking  是后台运行的形式,使用此启动类型应同时指定
PIDFile  以便 systemd 能够跟踪服务的主进程。
ExecStart  为服务的具体运行命令
ExecReload  为重启命令
ExecStop  为停止命令
PrivateTmp=True  表示给服务分配独立的临时空间
注意:启动、重启、停止命令全部要求使用绝对路径
[Install] 服务安装的相关设置,可设置为多用户
-----------------
chmod 754 /lib/systemd/system/nginx.service
systemctl start nginx.service    #启动服务
systemctl enable nginx.service    #开机自启动

三、Nginx主配置文件 nginx.conf

---  认识Nginx服务的主配置文件 nginx.conf  ----

vim /usr/local/nginx/conf/nginx.conf

1. 全局配置

①、运行用户:user nobody;:指定Nginx服务的运行用户,默认是 nobody。如果需要指定其他用户,可以在此处修改。

②、工作进程:worker_processes 4;:配置工作进程的数量,通常设置为服务器核心数的2倍。对于低访问量的网站,设置为1可能已经足够。

示例:   CPU配置

2P:2个物理CPU。
4C:每个物理CPU有4个核心,因此总共有2 * 4 = 8个逻辑核心。
内存配置: 8GB。
存储配置: 4C 16G 高效盘 40GB(系统盘)、存储OSS、网络存储NAS 50MB。
③、错误日志:error_log logs/error.log;:指定错误日志文件的位置。默认情况下,这一项是被注释掉的,可以根据需要启用并指定路径。

④、PID文件:#pid logs/nginx.pid;:指定PID文件的位置。PID文件用于存储Nginx进程的ID,以便管理和控制服务。默认是被注释掉的,可以根据需要启用并指定路径。

2. I/O 事件配置

events {
    use epoll;                     # 使用 epoll 模型, 2.6 及以上版本的系统内核,建议使用epoll模型以提高性能
    worker_connections 4096;              # 每个进程处理 4096 个连接 2000
}
  • #如提高每个进程的连接数还需执行“ulimit -n 65535”命令临时修改本地每个进程可以同时打开的最大文件数。
  • #Linux平台上,在进行高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量的限制(这是因为系统为每个TCP连接都要创建一个socket句柄,每个socket句柄同时也是一个文件句柄)
  • #可使用ulimit -a命令查看系统允许当前用户进程打开的文件数限制。 /etc/security/limits.conf
  • #epoll是Linux内核为处理大批句柄而作改进的poll,是Linux下多路复用IO接口select/poll的增强版 本,它能显著的减少程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率。若工作进程数为 8,每个进程处理 4 096 个连接,则允许 Nginx 正常提供服务的连接数 已超过 3 万个(4 096×8=32 768),当然具体还要看服务器硬件、网络带宽等物理条件的性能表现。

3. HTTP 配置

使用 “http { }” 界定标记,包括访问日志、 HTTP 端口、网页目录、默认字符集、连接保
持,以及后面要讲到的虚拟 Web 主机、 PHP 解析等一系列设置,其中大部分配置语句都包
含在子界定标记 “server { }”
http {
    ## 文件扩展名与文件类型映射表
    include mime.types;
    
    ## 默认文件类型
    default_type application/octet-stream;
 
    ## 日志格式设定(示例已被注释)
    # log_format main '$remote_addr - $remote_user [$time_local] "$request" '
    #                     '$status $body_bytes_sent "$http_referer" '
    #                     '"$http_user_agent" "$http_x_forwarded_for"';
    
    ## 访问日志位置(示例已被注释)
    # access_log logs/access.log main;
 
    ## 支持文件发送(下载)
    sendfile on;
 
    ## 连接保持超时时间,单位是秒
    keepalive_timeout 65;
 
    ## Web 服务的监听配置
    server {
        ## 监听地址及端口
        listen 80;
 
        ## 站点域名,可以有多个,用空格隔开
        server_name www.kgc.com;
 
        ## 网页的默认字符集
        charset utf-8;
 
        ## 根目录配置
        location / {
            ## 网站根目录的位置
            root html;
 
            ## 默认首页文件名
            index index.html index.php;
        }
 
        ## 内部错误的反馈页面
        error_page 500 502 503 504 /50x.html;
 
        ## 错误页面配置
        location = /50x.html {
            root html;
        }
    }
}
日志格式设定:
$remote_addr $http_x_forwarded_for 用以记录客户端的 ip 地址;
$remote_user :用来记录客户端用户名称;
$time_local : 用来记录访问时间与时区;
$request : 用来记录请求的 url http 协议;
$status : 用来记录请求状态;成功是 200
$body_bytes_sent :记录发送给客户端文件主体内容大小;
$http_referer :用来记录从哪个页面链接访问过来的;
$http_user_agent :记录客户浏览器的相关信息;

  • 10
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值