1.架构
-
B/S架构(Browser/Server,浏览器/服务器模式):
- 用户通过浏览器(如Chrome、Firefox)来访问应用程序。
- 应用程序的主要业务逻辑在服务器端实现,浏览器端主要负责展示和用户交互。
- 优点:无需安装客户端,只需有浏览器即可访问;更新维护在服务器端进行,用户无需更新;跨平台。
- 缺点:高度依赖网络,性能受浏览器限制,功能相对受限。
-
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 主要功能
- Web服务器:提供静态和动态内容。
- 反向代理:接收客户端请求,然后将它们转发到后端服务器,并将响应返回给客户端。
- 负载均衡:在多个后端服务器之间分配网络流量。
- SSL终止:处理HTTPS请求的加密和解密,减轻后端服务器的负担。
- 缓存:缓存内容以加快响应速度。
- 压缩:压缩响应内容以减少带宽使用。
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、使用浏览器访问页面,验证是否成功