项目实战:利用LNMP架构实现可道云私有云

Nginx的常用配置

1.URI和URL的区别

  1. URI (Uniform Resource Identifier):
    • uri 指的是资源的标识符,是相对于服务器根目录的路径部分,不包括协议、主机名和端口。例如,在 URL http://www.example.com/path/to/file 中,uri/path/to/file
  2. URL (Uniform Resource Locator):
    • url 指的是资源的完整地址,包括协议、主机名、端口和路径。例如,http://www.example.com/path/to/file 是一个完整的 URL。

2.fastcgi_params

fastcgi_params 文件是 Nginx 中用于配置 FastCGI 代理时所需的参数。FastCGI 是一种协议,用于将请求从 Web 服务器传递到应用服务器(如 PHP、Python 等)。这个文件定义了一组默认的参数,这些参数将被传递给 FastCGI 后端,以便后端能够处理请求。

以下是 fastcgi_params 文件中的内容及其解释:

fastcgi_param  QUERY_STRING       $query_string;	#QUERY_STRING: 传递请求的查询字符串部分,例如 ?foo=bar。
fastcgi_param  REQUEST_METHOD     $request_method;	#REQUEST_METHOD: 传递 HTTP 请求方法(GET、POST 等)。
fastcgi_param  CONTENT_TYPE       $content_type;	#CONTENT_TYPE: 传递请求的内容类型(MIME 类型),例如 text/html。
fastcgi_param  CONTENT_LENGTH     $content_length;	#CONTENT_LENGTH: 传递请求内容的长度。
fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;	#SCRIPT_NAME: 传递脚本名称,通常是请求的 URI。
fastcgi_param  REQUEST_URI        $request_uri;	#REQUEST_URI: 传递原始请求 URI(不包括主机名),例如 /index.php.
fastcgi_param  DOCUMENT_URI       $document_uri;	#DOCUMENT_URI: 传递请求的 URI,通常与 REQUEST_URI 相同。
fastcgi_param  DOCUMENT_ROOT      $document_root;	#DOCUMENT_ROOT: 传递服务器的文档根目录。
fastcgi_param  SERVER_PROTOCOL    $server_protocol;	#SERVER_PROTOCOL: 传递请求使用的协议,通常是 HTTP/1.0 或 HTTP/1.1。
fastcgi_param  REQUEST_SCHEME     $scheme;	#REQUEST_SCHEME: 传递请求的协议方案(HTTP 或 HTTPS)。
fastcgi_param  HTTPS              $https if_not_empty;	#HTTPS: 传递 HTTPS 的状态,如果是 HTTPS 请求则传递 on。
fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;	#GATEWAY_INTERFACE: 传递网关接口的版本,这里是 CGI/1.1。
fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;	#SERVER_SOFTWARE: 传递服务器软件名称和版本。
fastcgi_param  REMOTE_ADDR        $remote_addr;	#REMOTE_ADDR: 传递客户端的 IP 地址。
fastcgi_param  REMOTE_PORT        $remote_port;	#REMOTE_PORT: 传递客户端使用的端口号。
fastcgi_param  SERVER_ADDR        $server_addr;	#SERVER_ADDR: 传递服务器的 IP 地址。
fastcgi_param  SERVER_PORT        $server_port;	#SERVER_PORT: 传递服务器使用的端口号。
fastcgi_param  SERVER_NAME        $server_name;	#SERVER_NAME: 传递服务器的主机名。
# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param  REDIRECT_STATUS    200;	#REDIRECT_STATUS: 传递重定向状态码,这里设置为 200,这通常用于 PHP,特别是在编译 PHP 时使用了 --enable-force-cgi-redirect 选项。
这些参数对于 Nginx 和后端 FastCGI 服务器之间的通信至关重要,它们帮助 FastCGI 服务器理解并处理来自 Nginx 的 HTTP 请求。

3.项目实战:利用LNMP实现可道云私有云

可道云,原名芒果云,是基于web技术的私有云在线文档管理解决方案。

官网:https://kodcloud.com/

3.1 环境说明

# 部署规划:
10.0.0.107: Rocky Linux 9.3,Nginx 1.26,php-fpm8.0.30,kodbox.1.50
10.0.0.131: Rocky Linux 9.2,MySQL8.0.36,Redis 6.2.7

image-20240627104530432

3.2 准备 MySQL 数据库

[root@Rocky9 ~]# yum -y install mysql-server
[root@Rocky9 ~]# systemctl enable --now mysqld
[root@Rocky9 ~]# mysql
elcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 18
Server version: 8.0.36 Source distribution

Copyright (c) 2000, 2024, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show schemas;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.22 sec)

mysql> create database kodbox;
Query OK, 1 row affected (0.02 sec)

mysql> create user kodbox@'10.0.0.%' identified by '123456';
Query OK, 0 rows affected (0.05 sec)

mysql> grant all on kodbox.* to kodbox@'10.0.0.%';
Query OK, 0 rows affected (0.02 sec)

3.3 准备 Redis 服务

[root@Rocky9 ~]# yum -y install redis
# 新版本的配置文件都在 /etc/redis/redis.conf,之前老版本的配置文件在/etc/redis.conf
[root@Rocky9 ~]# vim /etc/redis/redis.conf
bind 127.0.0.1 -> bind 0.0.0.0 #修改此行
# 使用 sed 修改
[root@Rocky9 ~]# sed -i 's/^bind.*/bind 0.0.0.0/' /etc/redis/redis.conf
[root@Rocky9 ~]# systemctl enable --now redis

3.4 准备 Nginx 服务

[root@Rocky93 ~]# yum install nginx -y
[root@Rocky93 ~]# mkdir -pv /data/html
mkdir: created directory '/data'
mkdir: created directory '/data/html'
[root@Rocky93 ~]# vim /etc/nginx/conf.d/kod.conf
server {
    listen 80;
    server_name cloud.kod.org;
    root /data/html;
    location / {
        index index.php index.html;
    }
    location ~ \.php$ {
        fastcgi_pass    127.0.0.1:9000;
        fastcgi_index   index.php;
        fastcgi_param   SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}
[root@Rocky93 ~]#systemctl enable --now nginx

3.5 PHP 扩展 session 模块支持 Redis

PECL是 PHP 扩展的存储库,提供用于下载和开发 PHP 扩展的所有已知扩展和托管功能的目录

官网: https://pecl.php.net/package/redis

开始在 PHP 中使用 Redis 前, 需要确保已经安装了 redis 服务及 PHP redis 驱动。编译安装使用这个,下面是通过yum源安装的,就是php80-php-pecl-redis6

3.6 安装和配置 php 支持 Redis

# 更新yum源
[root@Rocky93 ~]#yum -y install https://mirrors.tuna.tsinghua.edu.cn/remi/enterprise/remi-release-9.rpm
[root@Rocky93 ~]#yum -y install php80-php-fpm php80-php-mysqlnd php80-php-pecl-redis6 php80-php-mbstring php80-php-xml php80-php-gd
[root@Rocky93 ~]#vim /etc/opt/remi/php80/php-fpm.d/www.conf
user = nginx
group = nginx

;使用sockt套接字的话是看不到9000端口的,可以修改成下面的
;listen = /var/opt/remi/php80/run/php-fpm/www.sock
listen = 127.0.0.1:9000

# 注释掉文件结尾的两行,添加下面两行
php_value[session.save_handler] = redis
php_value[session.save_path]    = "tcp://10.0.0.131:6379"

# 启动php-fpm
[root@Rocky93 ~]# systemctl enable --now php80-php-fpm.service
Created symlink /etc/systemd/system/multi-user.target.wants/php80-php-fpm.service → /usr/lib/systemd/system/php80-php-fpm.service.
[root@Rocky93 ~]#

如果不安装 php80-php-mbstring php80-php-xml php80-php-gd 这三个包,在安装过程中提示下面错误

image-20240627165825941

3.7 准备可道云程序

[root@Rocky93 ~]#wget https://static.kodcloud.com/update/download/kodbox.1.50.zip
[root@Rocky93 ~]#unzip kodbox.1.50.zip -d /data/html/
[root@Rocky93 ~]#chown -R nginx.nginx /data/html/

3.8 初始化和登录可道云

image-20240627170356893

image-20240627170329124

image-20240627174356675

4.Nginx 二次开发版本

4.1 Tengine

Tengine 是由淘宝(阿里巴巴集团)主导开发的一个Web服务器项目,它是在 Nginx 基础上进行了增强和扩展。Tengine 旨在提供更高的性能和稳定性,同时增加了一些特性,以满足大规模网站的需求。

官网 - The Tengine Web Server (taobao.org)

官方文档 - The Tengine Web Server (taobao.org)

继承Nginx-1.24.0的所有特性,兼容Nginx的配置;
支持域名,证书,路由的动态无损生效;
支持HTTP/3 (QUIC v1和draft-29);
支持bypass内核的用户态高性能UDP转发;
支持基于header,cookie,query和服务权重的高级路由动态无损生效;
支持基于高级路由的请求和响应流量染色动态无损生效;
支持配置分域名TLS多版本,timeout,强制HTTPS,CORS和robots的动态无损生效;
支持HTTP的CONNECT 方法,可用于正向代理场景;
增强相关运维监控能力,比如异步打印日志及回滚,本地DNS缓存,内存监控等;
流式上传到HTTP后端服务器或FastCGI服务器,大量减少机器的I/O压力;
支持异步OpenSSL,可使用硬件如:QAT进行HTTPS的加速与卸载;
更加强大的负载均衡能力,包括一致性hash模块,会话保持模块,还可以对后端的服务器进行主动健康检查,根据服务器状态自动上线下线,以及动态解析upstream中出现的域名;
4.1.1 编译安装 Tengine-3.1.0

注意:在Tengine-2.3.0版本后废弃Tengine的dso_tool工具以及dso配置指令,若之前有使用Tengine的dso功能、则可以切换到Nginx官方的load_module指令,详细文档参考1参考2

动态加载模块 - The Tengine Web Server (taobao.org)

CentOS 7: Tengine 的任何版本都可以在 CentOS 7 上面安装;
Rocky 8: 只有 Tengine-2.3.0到Tengine-3.1.0 这些版本可以在Rocky 8上面安装,2.3.0以前的只能在CentOS 7上面安装部署;
Rocky 9: 只有 Tengine-2.4.0到Tengine-3.1.0 这四个版本可以在 Rocky 9 以上版本安装。

# RedHat 系列安装的包
[root@Rocky93]#yum -y install gcc pcre-devel openssl-devel make
# Ubuntu 系列安装的包
[root@ubuntu ~]#apt update
[root@ubuntu ~]#apt install gcc libssl-dev libpcre3-dev zlib1g-dev make

[root@Rocky93]#useradd -r -s /sbin/nologin nginx
[root@Rocky93]#wget https://tengine.taobao.org/download/tengine-3.1.0.tar.gz
[root@Rocky93]#tar xf tengine-3.1.0.tar.gz
# 检查(--with-http_lua_module=shared --with-http_concat_module=shared 高版本中这些参数已经不支持了,只有在2.3.0之前才支持)
[root@Rocky93]#./configure --prefix=/apps/tengine-3.1.0 --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
#  根据 Makefile 中定义的规则来编译源代码
[root@Rocky93]#make
# 根据 Makefile 中定义的安装规则,将编译生成的文件复制到系统的指定目录(通常是 /usr/local/bin, /usr/local/lib 等)。
[root@Rocky93]#make install
[root@Rocky93]#ln /apps/tengine-3.1.0/sbin/nginx /usr/sbin/

4.2 OpenResty

  1. OpenResty 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模 块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务 和动态网关。
  2. OpenResty 通过汇聚各种设计精良的 Nginx 模块(主要由 OpenResty 团队自主开发),从而将 Nginx 有效地变成一个强大的通用 Web 应用平台。这样,Web 开发人员和系统工程师可以使用 Lua 脚本语言 调动 Nginx 支持的各种 C 以及 Lua 模块,快速构造出足以胜任 10K 乃至 1000K 以上单机并发连接的高 性能 Web 应用系统
  3. OpenResty 的目标是让你的Web服务直接跑在 Nginx 服务内部,充分利用 Nginx 的非阻塞 I/O 模型, 不仅仅对 HTTP 客户端请求,甚至于对远程后端诸如 MySQL、PostgreSQL、Memcached 以及 Redis 等都进行一致的高性能响应

官网:https://openresty.org/cn/

4.2.1 编译安装 OpenResty
# RedHat 系列需要安装的包
[root@Rocky9 ~]# dnf -y install gcc pcre-devel openssl-devel perl
# Debian 系列,例如Ubuntu需要安装的包
[root@ubuntu ~]# apt install gcc libssl-dev libpcre3-dev
# 创建用户
[root@Rocky9 ~]#groupadd -r -g 123 nginx
[root@Rocky9 ~]#useradd -r -g nginx -u 123 -s /sbin/nologin nginx
# 下载源码包并编译安装
[root@Rocky9 ~]# wget https://openresty.org/download/openresty-1.25.3.1.tar.gz
[root@Rocky9 ~]# tar xf openresty-1.25.3.1.tar.gz openresty-1.25.3.1/
[root@Rocky9 ~]# cd openresty-1.25.3.1/
[root@Rocky9 ~]# ./configure --prefix=/apps/openresty --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
[root@Rocky9 ~]# make && make install
# 查看
[root@Rocky9 ~]# ls /apps/openresty/
bin  COPYRIGHT  luajit  lualib  nginx  pod  resty.index  site

[root@Rocky9 ~]# ln /apps/openresty/bin/* /usr/bin/
# 查看版本
[root@Rocky9 ~]# openresty -v
nginx version: openresty/1.25.3.1
[root@Rocky9 ~]#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

XingYuyu_Coder

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值