35.Nginx 服务器
文章目录
- Nginx 服务器
- Nginx
- 介绍
- 核心特性
- 安装Nginx
- Nginx配置文件结构
- 主要配置文件
- 配置文件层次结构
- 虚拟主机
- 根据名称
- 根据端口 port
- 配置SSL/TLS
- 配置站点
- 生成证书
- 测试
- 支持动态脚本
- 使用PHP
- PHP的作用和特点
- 主要作用
- 核心特点
- Nginx服务器项目实战
- 实战项目:ecshop
- ecshop 介绍
- ecshop 安装
- 准备数据库
- 准备 ecshop 站点
- 验证
- 代理
- 反向代理
- 角色说明
- 代理服务器配置
- 真实服务器配置
- 客户端测试
- 正向代理
Nginx 服务器
Nginx
介绍
Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。它具有占用内存少、并发能力强、配置简单等特点,是目前最流行的Web服务器之一。
核心特性
- 高并发处理能力 - 采用事件驱动架构,能够处理大量并发连接
- 低内存消耗 - 相比其他Web服务器,内存占用更少
- 反向代理和负载均衡 - 支持多台服务器的负载均衡
- 热部署 - 支持不停止服务的情况下更新配置和二进制文件
- 模块化设计 - 丰富的模块生态系统
安装Nginx
# 安装 nginx
[root@server ~ 09:26:46]# yum install -y nginx yum -y install nginx
# 重置页面
[root@server ~ 09:27:15]# echo Hello World From Nginx > /usr/share/nginx/html/index.html
# 启动 nginx
[root@server ~ 09:27:48]# systemctl enable nginx --now
# 关闭防火墙
[root@server ~ 09:28:12]# systemctl stop firewalld
# windows客户端修改C:WindowsSystem32driversetchosts
# Linux或Unix修改 /etc/hosts
# 添加如下记录
10.1.8.10 www.hxl.cloud
[root@client ~ 09:28:46]# curl http://www.hxl.cloud
Nginx配置文件结构
主要配置文件
- 主配置文件:
/etc/nginx/nginx.conf - 站点配置文件:
/etc/nginx/conf.d/或/etc/nginx/sites-available/ - 默认站点目录:
/usr/share/nginx/html
配置文件层次结构
text
nginx.conf
├── events块 (连接处理配置)
├── http块 (HTTP服务器配置)
│ ├── server块 (虚拟主机配置)
│ │ ├── location块 (URL匹配配置)
│ │ └── location块
│ └── server块
虚拟主机
同一个web服务器提供多个站点。
参考主配置文件 /etc/nginx/nginx.conf 中的server块配置内容
根据名称
[root@server ~ 09:35:28]# mkdir /usr/share/nginx/web{1,2}
[root@server ~ 09:43:16]# echo web1.hxl.cloud > /usr/share/nginx/web1/index.html
[root@server ~ 09:44:33]# echo web2.hxl.cloud > /usr/share/nginx/web2/index.html
[root@server ~ 09:41:17]# vim /etc/nginx/conf.d/vhost-name.conf
server {
server_name web1.hxl.cloud;
root /usr/share/nginx/web1;
}
server {
server_name web2.hxl.cloud;
root /usr/share/nginx/web2;
}
重启服务并添加域名解析
[root@server ~ 09:44:43]# systemctl restart nginx
# 服务端客户端都添加域名解析
# 10.1.8.10 后面添加 web1.hxl.cloud web2.hxl.cloud
[root@server ~ 09:44:53]# vim /etc/hosts
客户端测试
[root@client ~ 09:51:52]# curl http://web1.hxl.cloud
web1.hxl.cloud
[root@client ~ 10:10:10]# curl http://web2.hxl.cloud
web2.hxl.cloud
根据端口 port
[root@server ~ 09:45:59]# mkdir /usr/share/nginx/808{1,2}
[root@server ~ 09:46:57]# echo 8081 > /usr/share/nginx/8081/index.html
[root@server ~ 09:47:38]# echo 8082 > /usr/share/nginx/8082/index.html
[root@server ~ 09:47:48]# vim /etc/nginx/conf.d/vhost-port.conf vim /etc/nginx/conf.d/vhost-port.conf
server {
listen 8081;
server_name www.hxl.cloud;
root /usr/share/nginx/8081;
}
server {
listen 8082;
server_name www.hxl.cloud;
root /usr/share/nginx/8082;
}
重启服务
[root@server ~ 09:44:43]# systemctl restart nginx
客户端测试
[root@client ~ 09:51:31]# curl http://www.hxl.cloud:8081
8081
[root@client ~ 09:51:48]# curl http://www.hxl.cloud:8082
8082
清理环境
[root@server ~ 10:13:51]# cd /etc/nginx/conf.d
[root@server conf.d 10:14:07]# mkdir vhosts
[root@server conf.d 10:14:14]# ls
vhost-name.conf vhost-port.conf vhosts
[root@server conf.d 10:14:15]# mv vhost-name.conf vhost-port.conf vhosts/
[root@server conf.d 10:15:16]# ls
vhosts
配置SSL/TLS
SSL,安全套接字。用于在互联网上提供安全通信。
TLS,传输层安全。TLS是SSL的继任者。比SSL更安全,更高效。
配置站点
[root@server conf.d 10:29:32]# mkdir /etc/ssl/certs/www.hxl.cloud
[root@server conf.d 10:29:51]# mv www* /etc/ssl/certs/www.hxl.cloud
[root@server ~ 10:36:59]# vim /etc/nginx/conf.d/ssl.conf
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name _;
root /usr/share/nginx/html;
# 证书
ssl_certificate "/etc/ssl/certs/www.hxl.cloud/www.crt";
# 密钥
ssl_certificate_key "/etc/ssl/certs/www.hxl.cloud/www.key";
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 10m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
}
[root@server ~ 10:50:55]# systemctl restart nginx
# 配置HTTP重定向到https.
[root@server ~ 11:17:11]# vim /etc/nginx/conf.d/ssl.conf
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name www.hxl.cloud;
root /usr/share/nginx/html;
# 添加 重定向
return 301 https://$host$request_uri;
}
[root@server ~ 11:21:52]# systemctl restart nginx
生成证书
#--1--生成私钥
[root@server conf.d 10:24:31]# openssl genrsa -out www.key 2048
Generating RSA private key, 2048 bit long modulus
...................................+++
.................................................+++
e is 65537 (0x10001)
#--2--生成请求文件csr
[root@server conf.d 10:25:13]# openssl req -new -key www.key -out
www.csr -subj "/C=CN/ST=JS/L=NJ/O=LM/OU=DEVOPS/CN=www.hxl.cloud/emailAddress=hxl@hxl.cloud"
#CN的值必须是网站域名
#--3--使用自己的私钥对请求文件签名,以生成证书
[root@server conf.d 10:26:40]# openssl x509 -req -days 3650 -in www.csr -signkey www.key -out www.crt
Signature ok
subject=/C=CN/ST=JS/L=NJ/O=LM/OU=DEVOPS/CN=www.hxl.cloud/emailAddress=hxl@hxl.cloud
Getting Private key
[root@server conf.d 10:27:27]# ls
vhosts www.crt www.csr www.key
[root@server conf.d 10:29:32]# mkdir /etc/ssl/certs/www.hxl.cloud
[root@server conf.d 10:29:51]# mv www* /etc/ssl/certs/www.hxl.cloud
测试
# 测试之前重启服务
[root@server ~ 11:21:52]# systemctl restart nginx
[root@client ~ 11:22:14]# curl http://www.hxl.cloud/
[root@client ~ 11:22:19]# curl -k https://www.hxl.cloud/
支持动态脚本
使用PHP
PHP(Hypertext Preprocessor)是一种开源的服务器端脚本语言,专门为Web开发设计。它可以在服务器上执行,生成动态的网页内容。
PHP的作用和特点
主要作用
- 动态内容生成 - 根据用户请求生成不同的HTML内容
- 表单处理 - 处理用户提交的数据
- 数据库操作 - 与MySQL等数据库交互
- 会话管理 - 管理用户登录状态
- 文件操作 - 上传、下载、管理文件
核心特点
- 服务器端执行 - 代码在服务器运行,客户端看到的是结果
- 跨平台 - 支持Windows、Linux、macOS
- 开源免费 - 完全免费使用
- 易于学习 - 语法类似C和Java
- 强大的扩展库 - 丰富的内置函数和扩展
php-fpm: 负责接收web程序发来的php代码
php:负责解析和执行php代码,并将结果返回给php-fpm,php-fpm将结果返回给web程序
# 安装PHP和php-fpm,建议把其他的扩展包一起安装
[root@server ~ 11:39:10]# yum install -y php php-fpm
# 建议把其他的扩展包一起安装
[root@server ~ 11:39:36]# yum install -y php-gd php-common php-pear php-mbstring php-mcrypt
# 查看 php 版本
[root@server ~ 11:40:43]# php -v
PHP 5.4.16 (cli) (built: Apr 1 2020 04:07:17)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies
# 测试 php 是否正常
[root@server ~ 11:40:52]# echo "" > php_test.php
[root@server ~ 11:41:12]# php php_test.php
PHP Test Page
# 准备测试页,使用phpinfo查看详细信息
[root@server ~ 11:41:22]# echo "" > /usr/share/nginx/html/info.php
# 修改配置文件
[root@server ~ 11:44:29]# vim /etc/nginx/conf.d/ssl.conf
# 在server块中添加下面配置
server {
.....
location ~ .php$ {
try_files $uri =404;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
# 测试
[root@client ~ 12:57:09]# curl -k https://www.hxl.cloud/info.php
Nginx服务器项目实战
实战项目:ecshop
ecshop 介绍
官网
ECShop多场景在线商城。
ecshop 安装
准备 LNMP 环境
# nginx
[root@server ~ 14:33:51]# yum install -y nginx
[root@server ~ 14:33:59]# systemctl enable nginx.service --now
# PHP
[root@server ~ 14:34:18]# yum install -y php php-fpm
[root@server ~ 14:34:18]# systemctl enalbe php-fpm.service
[root@server ~ 14:39:59]# cat > /usr/share/nginx/html/phpinfo.php << 'EOF'
<?php phpinfo(); ?>
EOF
# 客户端测试
[root@client ~ 14:40:22]# curl http://www.hxl.cloud/phpinfo.php
# Mariadb
[root@server ~ 14:41:33]# yum install -y mariadb-server
[root@server ~ 14:41:38]# systemctl enable mariadb --now
## 安全初始化
# 设置root密码为redhat
# 删除匿名用户
# 删除测试数据库
[root@server ~ 14:41:53]# mysql_secure_installation
准备数据库
[root@server ~ 14:43:21]# mysql -u root -predhat
MariaDB [(none)]> CREATE DATABASE ecshop;
MariaDB [(none)]> CREATE USER ecshop@localhost IDENTIFIED BY '123';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON ecshop.* TO ecshop@localhost;
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> exit
准备 ecshop 站点
准备 ecshop 站点配置文件。
[root@server ~ 14:49:35]# vim /etc/nginx/conf.d/vhost-www.hxl.cloud.conf
server {
listen 80;
listen [::]:80;
server_name www.hxl.cloud;
root /usr/share/nginx/html;
index index.php;
location ~ .php$ {
try_files $uri =404;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
准备 ecshop 站点数据文件,这里使用 ECShop_V4.1.20 版本。
# 上传到 root 用户家目录
[root@server ~ 14:50:49]# unzip ECShop_V4.1.20_UTF8.zip
[root@server ~ 14:51:10]# mv /usr/share/nginx/html/ /usr/share/nginx/html.ori
[root@server ~ 14:51:40]#cp -a ECShop_V4.1.20_UTF8_release20250416/source/ecshop /usr/share/nginx/html
# 安装站点需要的各种扩展包
[root@server ~ 14:52:06]# yum install -y php-gd php-common php-pear php-mbstring php-mcrypt php-mysqlnd
# 修改 php-fpm运行用户身份
[root@server ~ 15:09:15]# vim /etc/php-fpm.d/www.conf
# 更改以下两条记录
# user = apache
user = nginx
# group = apache
group = nginx
[root@server ~ 15:09:56]# chown nginx:nginx -R /usr/share/nginx/html
[root@server ~ 15:11:17]# systemctl restart nginx php-fpm
验证
客户端登陆 http://www.hxl.cloud



激活系统,享受更多服务。不激活也可以使用。
使用管理员账号进去查看内容。
商城首页。

代理
反向代理
客户端访问代理服务器,代理服务器会将客户端请求发送给真实服务器。如果服务器使用反向代理功能,客户端正常情况是不知道后端真实服务器。
反向代理实现了隐藏内部服务器。
角色说明
-
代理服务器 proxy 10.1.8.20
-
真实服务器 server 10.1.8.10
代理服务器配置
# 配置解析
[root@proxy ~ 16:02:49]# echo '10.1.8.10 www.hxl.cloud' >> /etc/hosts
# 安装 nginx
[root@proxy ~ 16:07:42]# yum -y install nginx
# 启动 nginx
[root@proxy ~ 16:13:07]# systemctl enable --now nginx
# 关闭防火墙
[root@proxy ~ 16:14:05]# systemctl stop firewalld
# 配置代理,server部分更改如下
[root@proxy ~ 16:09:50]# vim /etc/nginx/conf.d/proxy.conf
# 更改server块的配置信息
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
root /usr/share/nginx/html;
#添加如下内容
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
......
#新增 location 规则
location /proxy/ {
proxy_pass http://www.hxl.cloud/;
}
}
[root@proxy ~ 16:53:52]# systemctl restart nginx
真实服务器配置
# 安装nginx
[root@server ~ 17:23:15]# yum -y install nginx
# 启动nginx
[root@server ~ 17:23:41]# systemctl enable --now nginx
# 使用刚才项目实战的网页测试
# 测试效果
[root@client ~ 17:24:30]# curl http://www.hxl.cloud/proxy/
客户端测试
windows域名解析也需要配置
在后面加上10.1.8.20 ecshop.hxl.cloud

正向代理
我想访问目标资源,我自己不可达,我知道目标资源在哪里,找个代理(给跑腿费)帮我去拿。






