【Web服务】Nginx架构与配置详解

1.架构

  1. B/S架构(Browser/Server,浏览器/服务器模式):

    • 用户通过浏览器(如Chrome、Firefox)来访问应用程序。
    • 应用程序的主要业务逻辑在服务器端实现,浏览器端主要负责展示和用户交互。
    • 优点:无需安装客户端,只需有浏览器即可访问;更新维护在服务器端进行,用户无需更新;跨平台。
    • 缺点:高度依赖网络,性能受浏览器限制,功能相对受限。
  2. C/S架构(Client/Server,客户端/服务器模式):

    • 用户需要安装特定的客户端软件,通过客户端与服务器进行通信。

    • 客户端负责处理一部分业务逻辑,服务器端负责数据处理和存储。

    • 优点:可以充分利用客户端计算机的性能,用户体验好,功能强大。

    • 缺点:需要安装和更新客户端,维护成本高,跨平台性差。

2.状态码

状态码(HTTP状态码)是服务器对客户端请求的响应状态的一种表示。它们被分为5类:

  • 1xx(信息性状态码):请求已被接收,继续处理。
  • 2xx(成功状态码):请求已成功被服务器接收、理解、并接受。
  • 3xx(重定向状态码):需要后续操作才能完成这一请求。
  • 4xx(客户端错误状态码):请求含有词法错误或者无法被执行。
  • 5xx(服务器错误状态码):服务器在处理某个正确请求时发生错误。

常见的状态码有:

  • 200 OK:请求成功。
  • 301 Moved Permanently:永久重定向。
  • 302 Found:临时重定向。
  • 304 Not Modified:资源未修改,使用缓存。
  • 400 Bad Request:请求有语法错误。
  • 401 Unauthorized:请求需要用户验证。
  • 403 Forbidden:服务器拒绝执行请求。
  • 404 Not Found:请求的资源不存在。
  • 500 Internal Server Error:服务器内部错误。
  • 502 Bad Gateway:网关错误。
  • 503 Service Unavailable:服务不可用。

3.Nginx

3.1 Nginx简介

Nginx(发音为“engine x”)是一个开源的高性能HTTP和反向代理服务器,也可以用作邮件代理服务器、负载均衡器和HTTP缓存。它由伊戈尔·赛索耶夫创建,并于2004年首次公开发布。Nginx以处理高并发连接而闻名,被许多高流量网站使用,如GitHub、Dropbox等。

3.2 主要功能
  1. Web服务器:提供静态和动态内容。
  2. 反向代理:接收客户端请求,然后将它们转发到后端服务器,并将响应返回给客户端。
  3. 负载均衡:在多个后端服务器之间分配网络流量。
  4. SSL终止:处理HTTPS请求的加密和解密,减轻后端服务器的负担。
  5. 缓存:缓存内容以加快响应速度。
  6. 压缩:压缩响应内容以减少带宽使用。

3.3 基本用法

3.3.1 启动、停止和重新加载
# 启动
nginx

# 停止(快速关机,不等待完成当前请求)
nginx -s stop

# 优雅停止(等待完成当前请求)
nginx -s quit

# 重新加载配置文件
nginx -s reload

# 测试配置文件语法
nginx -t
3.3.2 配置文件结构

Nginx的配置文件通常位于/etc/nginx/nginx.conf/usr/local/nginx/conf/nginx.conf。配置文件由指令和块组成。主要结构如下:

main          # 全局配置,影响所有部分
events {      # 影响连接处理
    ...
}
http {        # HTTP服务器配置
    ...
    server {  # 虚拟主机配置
        ...
        location / {  # 处理特定URI的配置
            ...
        }
    }
}
3.3.3 静态网站示例
server {
    listen 80;
    server_name example.***;
    root /var/www/example.***;
    index index.html;

    location / {
        try_files $uri $uri/ =404;
    }
}
3.3.4 反向代理示例
server {
    listen 80;
    server_name example.***;

    location / {
        proxy_pass http://localhost:3000;  # 将请求转发到本地3000端口运行的应用
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}
3.3.5 负载均衡示例
http {
    upstream backend {
        server backend1.example.*** weight=5;
        server backend2.example.***;
        server backend3.example.*** backup;
    }

    server {
        listen 80;
        location / {
            proxy_pass http://backend;
        }
    }
}
3.3.5 日志文件

Nginx访问日志和错误日志通常位于:

  • 访问日志:/var/log/nginx/a***ess.log
  • 错误日志:/var/log/nginx/error.log
3.4 Nginx配置

1、关闭防火墙、核心防护

systemctl disable firewalld --now    #关闭防火墙
setenforce 0  #关闭核心防护

2、安装依赖环境

yum install -y g*** g***-c++ make pcre pcre-devel zlib zlib-devel openssl openssl-devel

安装编译Nginx所需的依赖包。

这些包的作用如下:

  • g***: GNU编译器集合,用于编译C语言代码。
  • g***-c++: 用于编译C++代码。
  • make: 构建工具,用于控制编译过程。
  • pcre: 正则表达式库,Nginx用于URL重写等功能。
  • pcre-devel: PCRE的开发文件(头文件和静态库)。
  • zlib: 压缩库,Nginx用于gzip压缩。
  • zlib-devel: zlib的开发文件。
  • openssl: 加密库,Nginx用于SSL/TLS功能(HTTPS)。
  • openssl-devel: OpenSSL的开发文件。

3、创建nginx用户和用户组

useradd -M -s /sbin/nologin nginx

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

  • 专用系统用户:只为Nginx服务使用
  • 无登录权限:提高安全性
  • 无家目录:减少攻击面
  • 最小权限:遵循安全最佳实践

4、上传并解压缩源码包tar.gz

cd /opt
tar zxvf nginx-1.20.2.tar.gz -C /opt/

5、进入解压后的目录,执行configure 的配置动作

cd nginx-1.20.2/

./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module \
--with-http_ssl_module
参数 作用 说明
--prefix=/usr/local/nginx 安装目录 Nginx 的根安装目录
--user=nginx 运行用户 指定 Nginx 工作进程的用户
--group=nginx 运行组 指定 Nginx 工作进程的用户组
--with-http_stub_status_module 状态模块 启用 Nginx 状态监控页面
--with-http_ssl_module SSL模块 启用 HTTPS 支持

6、执行编译与编译安装

make && make install  # 编译并安装软件

ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/  # 创建软链接,方便系统调用,可以直接使用 nginx 命令

7、检查、启动、停止nginx服务

nginx -t   #检查配置文件是否配置正确

nginx   #启动

cat /usr/local/nginx/logs/nginx.pid		#先查看nginx的PID号
kill -3 <PID号>

7、创建nginx的systemd服务文件

vim /lib/systemd/system/nginx.service

[Unit]
Description=nginx
After=***work.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=nginx 服务描述 显示在 systemctl status 中
After=***work.target 启动顺序 在网络服务启动后再启动 nginx

[Service] 部分

配置项 作用 说明
Type=forking 进程类型 Nginx 以守护进程方式运行
PIDFile=... PID 文件路径 systemd 通过此文件跟踪主进程
ExecStart=... 启动命令 启动 Nginx 的完整路径
ExecReload=... 重载命令 向主进程发送 HUP 信号重载配置
ExecStop=... 停止命令 向主进程发送 QUIT 信号优雅停止
PrivateTmp=true 安全隔离 为服务提供私有临时目录

[Install] 部分

配置项 作用 说明
WantedBy=multi-user.target 启动级别 在多用户模式下自动启动

8、服务配置验证流程

chmod 754 /lib/systemd/system/nginx.service   # 设置服务文件权限

systemctl start nginx.service   # 立即启动服务
systemctl enable nginx.service   # 设置开机自启

systemctl status nginx.service   # 检查服务状态

基本服务操作

# 启动服务
systemctl start nginx

# 停止服务
systemctl stop nginx

# 重启服务
systemctl restart nginx

# 重载配置(不中断服务)
systemctl reload nginx

# 查看服务状态
systemctl status nginx

# 启用开机自启
systemctl enable nginx

# 禁用开机自启
systemctl disable nginx

9、使用浏览器访问页面,验证是否成功

转载请说明出处内容投诉
CSS教程网 » 【Web服务】Nginx架构与配置详解

发表评论

欢迎 访客 发表评论

一个令你着迷的主题!

查看演示 官网购买