35.Nginx 服务器

Nginx 服务器

Nginx

介绍

Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。它具有占用内存少、并发能力强、配置简单等特点,是目前最流行的Web服务器之一。

核心特性

  1. 高并发处理能力 - 采用事件驱动架构,能够处理大量并发连接
  2. 低内存消耗 - 相比其他Web服务器,内存占用更少
  3. 反向代理和负载均衡 - 支持多台服务器的负载均衡
  4. 热部署 - 支持不停止服务的情况下更新配置和二进制文件
  5. 模块化设计 - 丰富的模块生态系统

安装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:\Windows\System32\drivers\etc\hosts
# 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的作用和特点

主要作用
  1. 动态内容生成 - 根据用户请求生成不同的HTML内容
  2. 表单处理 - 处理用户提交的数据
  3. 数据库操作 - 与MySQL等数据库交互
  4. 会话管理 - 管理用户登录状态
  5. 文件操作 - 上传、下载、管理文件
核心特点
  • 服务器端执行 - 代码在服务器运行,客户端看到的是结果
  • 跨平台 - 支持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 echo 'PHP Test Page'.\"\n\"; ?>" > php_test.php
[root@server ~ 11:41:12]# php php_test.php 
PHP Test Page

# 准备测试页,使用phpinfo查看详细信息
[root@server ~ 11:41:22]# echo "<?php phpinfo(); ?>" > /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

在这里插入图片描述

正向代理

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值