当前位置: 首页 > news >正文

Nginx 从入门到实战:安装、配置、升级与高级应用全解析

1 Nginx 概述和安装

2 Nginx 介绍

Nginx:engine X ,2002年开发,分为社区版和商业版(nginx plus ) 2019年3月11日 F5 Networks 6.7亿美元的价格收购 Nginx是免费的、开源的、高性能的HTTP和反向代理服务器、邮件代理服务器、以及TCP/UDP代理服务 器 解决C10K问题(10K Connections)

Nginx官网: http://nginx.org

nginx的其它的二次发行版:

  • Tengine:由淘宝网发起的Web服务器项目。它在Nginx的基础上,针对大访问量网站的需求,添加 了很多高级功能和特性。Tengine的性能和稳定性已经在大型的网站如淘宝网,天猫商城等得到了 很好的检验。它的最终目标是打造一个高效、稳定、安全、易用的Web平台。从2011年12月开始, Tengine成为一个开源项目官网: The Tengine Web Server
  • OpenResty:基于 Nginx 与 Lua 语言的高性能 Web 平台, 章亦春团队开发,

         官网: OpenResty® - 开源官方站 

2.1 Nginx 功能介绍

  1. 静态的web资源服务器html,图片,js,css,txt等静态资源
  2. http/https协议的反向代理
  3. 结合FastCGI/uWSGI/SCGI等协议反向代理动态资源请求
  4. tcp/udp协议的请求转发(反向代理)
  5. imap4/pop3协议的反向代理

3 Nginx安装

3.1 Nginx获取

  1. 网站获取下载链接,用wget命令下载
  2. 提前准备好安装包,传入并下载

我这里使用方法2,自备安装包后传入进行安装

对包进行解压缩:

tar zxf nginx-1.24.0.tar.gz 

可以看到nginx的目录解压出来了

3.2 安装相关依赖(一次性)

 安装nginx相关依赖插件:

dnf install gcc pcre-devel zlib-devel openssl-devel -y

3.3 编译安装 Nginx

进入目录文件后进行编译安装:
 

[root@nginx nginx-1.24.0]# ./configure \

> --prefix=/usr/local/nginx \                         # 设置 Nginx 的安装路径为 /usr/local/nginx
> --user=nginx \                                       # 指定 Nginx 进程将以 nginx 用户身份运行
> --group=nginx \                                        # 指定 Nginx 进程的组为 nginx

> --with-http_ssl_module \                       # 启用 HTTP SSL 模块
> --with-http_v2_module \                      # 启用 HTTP/2 模块,支持 HTTP/2 协议
> --with-http_realip_module \                #支持ip透传     
> --with-http_gzip_static_module \       #支持压缩      
> --with-http_stub_status_module \         #支持状态页面 
> --with-pcre \                                           #支持正则
> --with-stream \                                    #支持tcp反向代理
> --with-stream_ssl_module                       #支持tcp的ssl加密
创建一个专门运行 Nginx 服务的系统用户 :

useradd -s /sbin/nologin -M nginx

进入目录文件进行编译:

cd nginx-1.24.0/

运行下面命令: 

./configure 
--prefix=/usr/local/nginx 
--user=nginx 
--group=nginx 
--with-http_ssl_module 
--with-http_v2_module 
--with-http_realip_module 
--with-http_gzip_static_module 
--with-http_stub_status_module 
--with-pcre --with-stream 
--with-stream_ssl_module

取消debug模式,减小编译大小:

vim auto/cc/gcc

将debug模式注释掉 

编译:

 make

安装:

make install

修改全局配置:

vim ~/.bash_profile

 填入如下内容:

export PATH=$PATH:/usr/local/nginx/sbin

重新加载全局配置:

source ~/.bash_profile

查看nginx版本:
 

nginx -v

修改nginx对外显示得名称和版本:

4 平滑升级和回滚

4.1 平滑升级和回滚介绍

  • 将旧Nginx二进制文件换成新Nginx程序文件(注意先备份)
  • 向master进程发送USR2信号
  • master进程修改pid文件名加上后缀.oldbin,成为nginx.pid.oldbin
  • master进程用新Nginx文件启动新master进程成为旧master的子进程,系统中将有新旧两个Nginx主 进程共同提供Web服务,当前新的请求仍然由旧Nginx的worker进程进行处理,将新生成的master进 程的PID存放至新生成的pid文件nginx.pid
  • 向旧的Nginx服务进程发送WINCH信号,使旧的Nginx worker进程平滑停止
  • 向旧master进程发送QUIT信号,关闭老master,并删除Nginx.pid.oldbin文件
  • 如果发现升级有问题,可以回滚∶向老master发送HUP,向新master发送QUIT

4.1.1 实现平滑升级和回滚

启动nginx:

nginx

4.1.2 获取新nginx安装包

我在这已经准备好了新的安装包

进行解压:

 tar zxf nginx-1.26.1.tar.gz 

4.1.3 增加新模块(可选)

这里不添加新模块的可以跳过

先准备好新增模块的安装包

进行解压 

tar zxf echo-nginx-module-0.63.tar.gz 

4.1.4 进行编译安装

这是新加的模块,没加的可以忽略

进行编译:

 make

编译完成:

4.1.5 对旧版nginx命令进行备份

来到 /usr/local/nginx/sbin/ 

cd /usr/local/nginx/sbin/
ll

为了以防万一,对旧版的nginx命令进行备份,以便出现问题能够进行回滚操作:

cp nginx nginx.old

4.1.6 将新版的nginx命令替换掉现在的 nginx 

 使用新版nginx命令对现版本的nginx命令进行覆盖操作

\cp -f /root/nginx-1.26.1/objs/nginx /usr/local/nginx/sbin/

查看替换情况,替换成功

4.1.8 进行平滑升级

查看当前nginx的版本:

curl -I 172.25.254.10

 当前nginx版本为1.24.0

筛选nginx进程:

ps aux |grep nginx

可以看到新版的nginx已经可以看到,但是因为未进行替换升级,只有旧版的master在监听端口

平滑升级可执行程序,将存储有旧版本主进程PID的文件重命名为nginx.pid.oldbin,并启动新的 nginx

#此时两个master的进程都在运行,只是旧的master不在监听,由新的master监听80

#此时Nginx开启一个新的master进程,这个master进程会生成新的worker进程,这就是升级后的Nginx进 程,此时老的进程不会自动退出,但是当接收到新的请求不作处理而是交给新的进程处理。

kill -USR2 7838

再次查看nginx运行状况:

ps aux | grep nginx

发现新版的nginx已经上来了

回收旧版本:

kill -WINCH 7838

旧进程已经被回收:

查看当前nginx状况:

curl -I 172.25.254.10

版本号已经变更为1.26.1:

4.1.9 回滚

 操作与升级类似

先进行备份,然后将nginx文件覆盖,

        使用命令:

       [root@Nginx sbin]# kill -HUP 端口号

         将老版本的进程提上来

  • 将新进程杀掉,kill -WINCH 端口号
  •  完成回滚操作

先查看当前得版本:

curl -I 172.25.254.10

先当前得版本进行备份,因为是1.26.1,版本较新,我这边命名为nginx.new:

cp nginx nginx.new

备份完毕,将要回滚得old版本将nginx文件覆盖:

mv nginx.old nginx

查看进程,找到老版本端口号

ps aux | grep nginx

 将老版本进程提上来:

kill -HUP 7838

查看进程状况:

ps aux | grep nginx

将之前1.26.1版本的进行kill,实现回滚操作:

kill -WINCH 7858

查看进程状况: 

ps aux | grep nginx

1.26.1版本的进程以及kill了,留下的是1.24的进程 

查看版本情况:

curl -I 172.25.254.10

成功实现回滚: 

 

    4.1.10 进行平滑升级和回滚时的排错(可选)

    发生如下图情况:

    进行平滑升级后,新版本进程仍未上来,那么可以进行下面步骤:

    将当前的nginx进程杀掉:

    然后将我们之前备份的ngin.old 手动回滚:

    [root@nginx sbin]# \cp -f /usr/local/nginx/sbin/nginx.old /usr/local/nginx/sbin/nginx

    再次启动nginx,版本号显示1.24.0,回滚完毕:

    此时再进行平滑升级操作即可。

    5 nginx核心配置

    5.1  nginx服务的启动脚本编写

    编辑 /lib/systemd/system/ 下的文件,底下的名字自己取

    vim /lib/systemd/system/nginx.service
    [Unit]
    Description=The NGINX HTTP and reverse proxy server
    After=syslog.target network-online.target remote-fs.target nss-lookup.target
    Wants=network-online.target[Service]
    Type=forking
    PIDFile=/usr/local/nginx/logs/nginx.pid
    ExecStartPre=/usr/local/nginx/sbin/nginx -t
    ExecStart=/usr/local/nginx/sbin/nginx
    ExecReload=/usr/local/nginx/sbin/nginx -s reload
    ExecStop=/bin/kill -s QUIT $MAINPID
    PrivateTmp=true[Install]
    WantedBy=multi-user.target
    

    重新读取配置:

    [root@nginx sbin]# systemctl start nginx

    关闭nginx:

    [root@nginx sbin]# killall nginx

    启动nginx:

    [root@nginx sbin]# systemctl start nginx

    可以看见配置完成:

    #########################

    5.2 实现nginx的高并发配置

    查看当前系统支持打开的文件数量:

    ulimit -a

     查看到当前系统支持最多打开1024个文件:

     

    先对最大文件打开数进行修改:

    vim /etc/security/limits.conf 

    编辑文件最大打开数为100000:

    ulimit -n 100000

    再次进行查看:

    ulimit -n 

    编辑nginx配置文件:

    vim /usr/local/nginx/conf/nginx.conf

    修改

    重启服务:

    systemctl restart nginx

    测试:

    ab -n100000 -c5000 http://172.25.254.10/index.html

    5.3 新建一个 PC web 站点

    编辑nginx配置文件:
     

    vim /usr/local/nginx/conf/nginx.conf

    填入如下内容:

    include "/usr/local/nginx/conf.d/*.conf";
    #在配置文件的最后面添加此行
    #注意不要放在最前面,会导致前面的命令无法

     创建子配置文件目录:

    mkdir -p /usr/local/nginx/conf.d/

    编写子配置文件:

    vim /usr/local/nginx/conf.d/vhosts.conf

    指定域名为www.rin.com 

    server{listen 80;server_name www.rin.com;root /web/html;index index.html;
    }
    

     为主机添加域名解析:

    vim /etc/hosts


    重载配置:

    nginx -s reload

    为测试提供其前提条件:

    在默认发布目录填入内容为:

    echo rin-172.25.254.10 > /usr/local/nginx/html/index.html

    为子配置目录填入内容为:

    mkdir -p /web/html
    echo www.rin.com > /web/html/index.html

    测试:

    当使用IP进行访问:

    curl 172.25.254.10

    当使用域名进行访问:

    curl www.rin.com

    5.4 root 与 alias

    root:指定web的家目录,在定义location的时候,文件的绝对路径等于 root+location

    创建网站文件,并进行编辑内容

    [root@nginx sbin]# mkdir /data/web/test -p
    [root@nginx sbin]# echo This is test > /data/web/test/index.html

    检验并重启服务:

    [root@nginx sbin]# nginx -t
    [root@nginx sbin]# systemctl restart nginx

    编辑配置:

    vim /usr/local/nginx/conf.d/vhost.conf
    server{listen 80;server_name www.rin.com;root /web/html;index index.html;location /test {root /web/test;} 
    }
    

    测试:

    alias:定义路径别名,会把访问的路径重新定义到其指定的路径,文档映射的另一种机制;仅能用于 location上下文,此指令使用较少

    重新编写个test2网页文件夹,并进行内容编写:

    [root@nginx sbin]# mkdir /data/web/test2 -p
    [root@nginx sbin]# echo This is test2 > /data/web/test2/index.html

    修改路径配置:(location与alias最后面要有斜杠就一起都有,反之没有就一起都没有)

    重启服务,并进行测试:

    [root@nginx sbin]# systemctl restart nginx

    测试完毕。

    5.5 Ngin账户认证:

    创建或更新一个存储基本认证用户名和密码的文件。这个命令会在 /usr/local/nginx/.htpasswd 文件中创建一个名为 admin 的用户,并为其设置密码。

    htpasswd -cm /usr/local/nginx/.htpasswd admin

     查看创建情况:

    cat /usr/local/nginx/.htpasswd

     创建login登录页面:

    mkdir -p /web/login
    echo login > /web/login/index.html
    

    编辑子文件配置:

    vim /usr/local/nginx/conf.d/vhosts.conf
    location /login {root /web;index index.html;auth_basic "piease input username and password";auth_basic_user_file "/usr/local/nginx/.htpasswd";}
    

    测试:
    直接访问登录页面:

    curl  www.rin.com/login/

    携带账户密码访问:

    curl -uadmin:123 www.rin.com/login/

     

    5.6 自定义错误页面:

     创建错误页面目录:

    mkdir -p /web/errorpage

    创建错误页面并填入信息:

    echo error-rin-error > /web/errorpage/error.html
    

     编辑子配置文件:

    vim /usr/local/nginx/conf.d/vhosts.conf
       error_page 500 502 503 504 404 /errorpage/error.html;location /errorpage {root /web;
    }
    

    检测配置语法是否有误:

    nginx -t
    

    重载服务配置:

    systemctl reload nginx.service

    测试:
    当访问没有的目录时,会跳转到自定义错误页面:

    curl www.rin.com/a

    5.7 自定义错误日志:

    systemctl reload nginx.service

     测试:

    ll /usr/local/nginx/logs/

    可以看到已经自动创建了 前面定义的日志目录:
     

     手动访问成功和失败,让日志产生内容:

    curl www.rin.com
    curl www.rin.com/a

    查看内容:
     

    ll /usr/local/nginx/logs/
    tail -5 /usr/local/nginx/logs/rin.access
    tail -5 /usr/local/nginx/logs/rin.error 

    5.8 长连接配置:

    keepalive_timeout timeout [header_timeout];   #设定保持连接超时时长,0表示禁止长连接,
                                                                                    默认为75s
                                                                            #通常配置在http字段作为站点全局配置
    keepalive_requests 数字;                         #在一次长连接上所允许请求的资源的最大数量
                                                                    #默认为100次,建议适当调大,比如:500
    keepalive_requests 3;
    keepalive_timeout 65 60;
                                                    #开启长连接后,返回客户端的会话保持时间为60s,单次长                                                  连 接累计请求达到指定次数请求或65秒就会被断
                                                开,第二个数字60为发送给客户端应答报文头部中显示的超时时                                           间设置为60s:如不设置客户端将不显示超时时 间。
    Keep-Alive:timeout=60                 #浏览器收到的服务器返回的报文
                                                            #如果设置为0表示关闭会话保持功能,将如下显示:
                                                    #Connection:close 浏览器收到的服务器返回的报文

    编辑keepalived配置文件:

    vim /usr/local/nginx/conf/nginx.conf
    

    下载测试软件:

    dnf install telnet -y

    填入如下内容:

    重新加载配置:

    systemctl reload nginx.service 

     测试:

    telnet 172.25.254.10 80

    逐行输入以下内容(按一次回车输入一行):

    GET / HTTP/1.1
    Host: 172.25.254.10
    Connection: close

    最后按两次回车(发送一个空行),触发请求发送。

    如果前面在配置文件设定为三次,则交换三次报文后连接就会关闭:

    5.9 作为下载服务器配置

    创建共享资源存放目录:

    mkdir -p /web/download
    

    建立实验素材:
    大小为50M

    dd if=/dev/zero of=/web/download/rin bs=1M count=50
    

    编辑子文件配置:

     location /download {autoindex on;autoindex_exact_size on;autoindex_localtime on;limit_rate;      }
    

    重新加载服务:

    systemctl reload nginx.service 

    查看下载页:

    curl www.rin.com/download/


    下载文件:

    linux上测试:

    curl -O www.rin.com/download/rin

    网页测试: 

    6 Nginx 高级配置

    6.1 nginx状态页面:

    编辑子文件配置:

    vim /usr/local/nginx/conf.d/vhosts.conf
    server{listen 80;server_name www.rin.com;root /web/html;index index.html;error_page 500 502 503 504 404 /errorpage/error.html;location /status {stub_status;auth_basic "auth login";auth_basic_user_file /usr/local/nginx/.htpasswd;allow 192.168.0.0/16;allow 172.25.0.0/16;deny all;
    }
    

    重新加载服务配置:

    systemctl reload nginx.service 

    测试:
    带上用户密码访问页面:

    curl -uadmin:123   www.rin.com/status/
    

    6.2 Nginx 压缩功能

    Nginx支持对指定类型的文件进行压缩然后再传输给客户端,而且压缩还可以设置压缩比例,压缩后的文 件大小将比源文件显著变小,样有助于降低出口带宽的利用率,降低企业的IT支出,不过会占用相 应的CPU资源。

    Nginx对文件的压缩功能是依赖于模块 ngx_http_gzip_module,默认是内置模块

    配置命令:

    #启用或禁用gzip压缩,默认关闭

    gzip on | off;

    #压缩比由低到高从1到9,默认为1,值越高压缩后文件越小,但是消耗cpu比较高。基本设定未4或者5

    gzip_comp_level 4;

    #禁用IE6 gzip功能,早期的IE6之前的版本不支持压缩

    gzip_disable "MSIE [1-6]\.";

    #gzip压缩的最小文件,小于设置值的文件将不会压缩

    gzip_min_length 1k;

    #启用压缩功能时,协议的最小版本,默认HTTP/1.1

    gzip_http_version 1.0 | 1.1;

    #指定Nginx服务需要向服务器申请的缓存空间的个数和大小,平台不同,默认:32 4k或者16 8k;

    gzip_buffers number size;

    #指明仅对哪些类型的资源执行压缩操作;默认为gzip_types text/html,不用显示指定,否则出错

    gzip_types mime-type ...;

    #如果启用压缩,是否在响应报文首部插入“Vary: Accept-Encoding”,一般建议打开

    gzip_vary on | off;

    #预压缩,即直接从磁盘找到对应文件的gz后缀的式的压缩文件返回给用户,无需消耗服务器CPU

    #注意: 来自于ngx_http_gzip_static_module模块

    gzip_static on | off;

    编辑nginx.conf配置文件:

    vim /usr/local/nginx/conf/nginx.conf

    填入如下内容,相关配置信息参考上面的配置内容。 

     gzip  on ;gzip_comp_level 4;gzip_disable "MSIE [1-6]\.";gzip_min_length 4k;gzip_vary on;gzip_static on;
    

    测试准备:

    创建small文件:

    echo rin-small > /usr/local/nginx/html/small.html

    创建big文件:

    cp /usr/local/nginx/logs/access.log   /usr/local/nginx/html/big.html
    

    查看大小:
     

    du -sh /usr/local/nginx/html/big.html
    du -sh /usr/local/nginx/html/small.html

    进行测试:
     

    curl --head --compressed 172.25.254.10/small.html
    
    curl --head --compressed 172.25.254.10/big.html

     Nginx 的 Gzip 配置已经生效,small.html 没有被压缩,而 big.html 被压缩了。这符合之前设置的 gzip_min_length 4k 配置。

    6.3 重新添加echo模块,并实现nginx变量使用:

    将nginx.conf配置文件及其子配置文件vhost.conf进行备份:
     

    cp /usr/local/nginx/conf.d/vhosts.conf vhost.conf.bat
    cp /usr/local/nginx/conf/nginx.conf nginx.conf.bat

    查看当前安装的模块配置:

     nginx -V

    将echo模块安装包解压:

    tar xzf echo-nginx-module-0.63.tar.gz

    进入nginx.26.1目录:

    cd nginx-1.26.1/

    进行编译,同时加上新模块,路径+安装包名:
     

    ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_gzip_static_module --with-http_stub_status_module --with-pcre --with-stream --with-stream_ssl_module --add-module=/root/echo-nginx-module-0.63 

    编译:
     

    make

    编译安装:

    make install

    查看模块安装情况:
     

     nginx -V

    重启nginx:

    systemctl restart nginx.service

    编辑子配置文件:

    vim /usr/local/nginx/conf.d/vhosts.conf
     location /var {default_type text/html;echo "客户端IP: $remote_addr";echo "请求参数: $args";echo "是否有参数: $is_args";echo "请求URI(不含参数): $document_uri";echo "请求主机名: $host";echo "限速值(字节/秒): $limit_rate";echo "客户端端口: $remote_port";echo "请求方法: $request_method";echo "请求协议: $scheme";echo "服务器端口: $server_port";echo "用户浏览器: $http_user_agent";
    }

    测试:

    curl -A "Mozilla/5.0 (Test) curl" "http://www.rin.com/var?name=test&age=20"

    6.4 匹配ssl证书及全站加密:

     创建证书储存文件:

     mkdir /usr/local/nginx/certs
    

    创建证书:

     openssl req -newkey rsa:2048 -nodes -sha256 -keyout /usr/local/nginx/certs/rin.key -x509 -days 365 -out /usr/local/nginx/certs/rin.crt
    

    编辑nginx子配置文件:

    vim /usr/local/nginx/conf.d/vhosts.conf 

    配置全站加密以及当 访问文件不存在时,访问页面重定向到首页:

      listen 443 ssl;ssl_certificate      /usr/local/nginx/certs/rin.crt;ssl_certificate_key  /usr/local/nginx/certs/rin.key;ssl_session_cache    shared:SSL:1m;ssl_session_timeout  5m; ssl_ciphers  HIGH:!aNULL:!MD5;  location / {if ( $scheme = http ){rewrite /(.*) https://$host/$1;}}

    测试:访问http连接,会将其转到https:

    curl  -I  http://www.rin.com


    6.5 当访问文件不存在重定向到首页:

     编辑nginx子配置文件:

    vim /usr/local/nginx/conf.d/vhosts.conf 

    填入如下配置:

    if ( !-e $request_filename ){rewrite /(.*) https://$host/index.html;}

    测试

    当访问文件不存在:

    curl  -L -k  http://www.rin.comcurl  -L -k  http://www.rin.com/a

    会重定向到首页: 

    7 nginx反向代理

    名称IP、VIP角色
    webserveraip:172.25.254.10Nginx 反向代理服务器
    nginxrs1ip:172.25.254.110后端服务器 1(静态资源)
    nginxrs2ip:172.25.254.120后端服务器 2(动态脚本处理)

    对rs1进行配置:

    安装httpd:

    dnf install httpd -y

    对rs1的默认发布目录进行编写内容:

    echo rs1-172.25.254.110 > /var/www/html/index.html
    

    重启服务:

    systemctl start httpd
    

    关闭防火墙:

    systemctl stop firewalld.service

    对rs2:
    安装httpd:

    dnf install httpd -y
    

    编辑尾缀为php的默认发布文件:

    echo "rs2-php-172.25.254.120" > /var/www/html/info.php
    

     重启服务:

    systemctl start httpd
    

    关闭防火墙:

    systemctl stop firewalld.service

    对nginx代理服务器进行配置:

    配置其子配置文件:

     vim /usr/local/nginx/conf.d/vhosts.conf
    server{listen 80;server_name www.rin.com;location / {proxy_pass http://172.25.254.110:80;}location ~ \.(php|jsp|js)$ {proxy_pass http://172.25.254.120:80;}
    }

    测试:

    当访问域名:

    curl www.rin.com

    当访问页面尾缀为php时:

    curl www.rin.com/info.php

    7.1 反向代理示例: 缓存功能

    名称IP、VIP角色
    clientip:172.25.254.220测试机
    webserveraip:172.25.254.10Nginx 反向代理服务器
    nginxrs1ip:172.25.254.110后端服务器 1
    nginxrs2ip:172.25.254.120后端服务器 2

    对nginx主配置文件:

    vim /usr/local/nginx/conf/nginx.conf

    填入如下内容:

     proxy_cache_path /usr/local/nginx/proxy_cache levels=1:2:2 keys_zone=proxycache:20minactive=120s max_size=1g;

     填入配置的目录会自动生成:

    ll /usr/local/nginx/proxy_cache/
    tree /usr/local/nginx/proxy_cache/

     

    编辑nginx子配置文件:

    vim /usr/local/nginx/conf.d/vhosts.conf

    填入如下内容: 

      location / {proxy_pass http://172.25.254.110:80;proxy_cache proxycache;proxy_cache_key $request_uri;proxy_cache_valid 200 302 301 10m;proxy_cache_valid any 1m;}

    重载配置:

    nginx -s reload

    测试:

    在clien测试机上进行测试:

    ab -n10000 -c500 http://www.rin.com/index.html


    当未配置缓存:

    当进行缓存配置:

    7.2 http 反向代理负载均衡

    配置rs1和rs2:

    dnf install httpd -y
    echo rs1-172.25.254.110 > /var/www/html/index.html
    echo rs2-172.25.254.120 > /var/www/html/index.html

      重启服务:

    systemctl start httpd
    

    关闭防火墙:

    systemctl stop firewalld.service

    配置nginx子配置文件:

    vim /usr/local/nginx/conf.d/vhosts.conf 
    upstream webserver {server 172.25.254.110:80 weight=1 fail_timeout=15s max_fails=3;server 172.25.254.120:80 weight=1 fail_timeout=15s max_fails=3;server 172.25.254.10:80  backup;
    }server{listen 80;server_name www.rin.com;location / {proxy_pass http://webserver;#proxy_cache proxycache;#proxy_cache_key $request_uri;#proxy_cache_valid 200 302 301 10m;#proxy_cache_valid any 1m;}

    配置完重载配置:

    nginx -s reload

    测试:
    在测试机进行实验

    curl www.rin.com

    7.3 FastCGI

    下载依赖软件:

    dnf install -y bzip2 systemd-devel libxml2-devel sqlite-devel
    libpng-devel.x86_64 libcurl-devel

     下面两个包要手动查找更新:

    yum install oniguruma-6.9.6-1.el9.6.x86_64.rpm -yyum install  oniguruma-devel-6.9.6-1.el9.6.x86_64.rpm -y

    解压php压缩包:

    tar xzf php-8.3.9.tar.gz

    进入php目录:

    cd php-8.3.9/

    编译安装:

     ./configure 
    --prefix=/usr/local/php 
    --with-config-file-path=/usr/local/php/etc 
    --enable-fpm 
    --with-fpm-user=nginx 
    --with-fpm-group=nginx 
    --with-curl 
    --with-iconv 
    --with-mhash 
    --with-zlib 
    --with-openssl 
    --enable-mysqlnd 
    --with-mysqli 
    --with-pdo-mysql 
    --disable-debug 
    --enable-sockets 
    --enable-soap 
    --enable-xml 
    --enable-ftp 
    --enable-gd 
    --enable-exif 
    --enable-mbstring 
    --enable-bcmath 
    --with-fpm-systemd
    make && make install

    切换目录

    cd /usr/local/php/etc/

    配置文件:

    cp php-fpm.conf.default php-fpm.conf
    vim php-fpm.conf

    编辑配置文件:

     cd php-fpm.d/
    cp www.conf.default www.conf

    编辑配置文件:

    cd /root/php-8.3.9/
    cp php.ini-production /usr/local/php/etc/php.ini

    修改时区:

    vim /usr/local/php/etc/php.ini

    进行注释:

    vim /lib/systemd/system/php-fpm.service

    启动php:

    systemctl start php-fpm.service

    查看进程:

    netstat -antlupe | grep php

    创建php目录:

    mkdir  /web/php

    编写php默认发布文件:

    vim /web/php/index.php

    填入如下内容: 

    <?php
    phpinfo();
    ?>

    nginx配置转发:

    编辑nginx子配置目录:

    server {listen 80;server_name www.rin.com;location ~ \.php$ {root /web;fastcgi_pass 127.0.0.1:9000;fastcgi_index index.php;include fastcgi.conf;fastcgi_param SCRIPT_FILENAME $document_root/php$fastcgi_script_name;}
    }

    重新加载配置:

    nginx -s

    测试:
    代码行:

    curl www.rin.com/index.php

    网页:

    添加php环境变量:

    找到php/bin:

    ll /usr/local/php/bin/

    编辑系统环境变量:

    vim /root/.bash_profile

    在原本的变量后面添加, 以  :  隔断:

    :/usr/local/php/bin

    重载环境配置:

    source .bash_profile

    7.4 php的动态扩展模块(php的缓存模块)

    软件下载:http://pecl.php.net/package/memcache

    7.5 安装memcache模块

    安装依赖:

    dnf install autoconf -y

    解压:

    tar xzf memcache-8.2.tgz

    来到memcache目录:

    cd memcache-8.2/
    phpize
    ./configure && make && make install

    ls /usr/local/php/lib/php/extensions/no-debug-non-zts-20230831

    复制测试文件到nginx发布目录中
    cd ~/memcache-8.2/
    cp example.php memcache.php /web/php/

    修改登入账号密码以及指定查看ip和端口:

    vim /web/php/memcache.php

    配置php加载memcache模块:
     

    vim  /usr/local/php/etc/php.ini

    填入如下配置:

     extension=memcache

    重新加载服务配置:
     

    systemctl reload php-fpm.service
    php -m | grep mem

    部署memcached:

    yum install memcached -y
    systemctl enable --now memcached.service
    netstat -antlupe | grep memcache

     

    测试:

    访问 http://www.rin.com/example.php 不断刷新
    访问 http://www.rin.com/memcache.php 查看命中效果
    如果要用其他电脑网页访问,前面的允许指定ip记得更改,这边为测试环境,所有我改为了0.0.0.0:

     

    性能对比:
    ab -n500 -c10 http://www.rin.com/index.php
    ab -n500 -c10 http://www.rin.com/example.php
    

    指标/example.php/index.php
    总耗时 (秒)0.5870.619
    吞吐量 (请求 / 秒)851.23807.15
    平均响应时间 (毫秒)11.74812.389
    失败请求数038
    传输速率 (KB / 秒)231.0959,160.27

    7.6 nginx 二次开发版-openresty:

    Nginx 是俄罗斯人发明的, Lua 是巴西几个教授发明的,中国人章亦春把 LuaJIT VM 嵌入到Nginx 中,实现了 OpenResty 这个高性能服务端解决方案
    OpenResty® 是一个基于 Nginx Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。
    OpenResty® 通过汇聚各种设计精良的 Nginx 模块(主要由 OpenResty 团队自主开发),从而将Nginx有效地变成一个强大的通用 Web 应用平台。这样,Web 开发人员和系统工程师可以使用 Lua 脚本语言调动 Nginx 支持的各种 C 以及 Lua 模块,快速构造出足以胜任 10K 乃至 1000K 以上单机并发连接的高性能 Web 应用系统。
    OpenResty 由于有功能强大且方便的的API,可扩展性更强,如果需要实现定制功能,OpenResty是个不错的选择
    官网: http://openresty.org/cn/

    安装依赖:

    dnf install gcc pcre-devel openssl-devel perl zlib-devel -y

    创建用户:

    useradd -r -s /sbin/nologin nginx

    解压openresty压缩包:

    tar zxf openresty-1.25.3.1.tar.gz

    进入目录:

    cd openresty-1.25.3.1

    编译:

    ./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
    

    编译安装:

    gmake && gmake install

    bianyibian'yi

    http://www.dtcms.com/a/326184.html

    相关文章:

  • Web 开发前端与后端 API 的交互
  • golang 基础案例_01
  • 【MYSQL】MySQL中On duplicate key update
  • 台式机内存条安装方法
  • Docker中安装MySQL 5的详细过程
  • 算法讲解--水果成篮
  • GitHub的简单使用方法----(2)
  • Android中Activity销毁底层原理
  • AVS Video Converter视频转换与编辑工具深度评测
  • 基于OpenCV的实时美颜技术:从传统算法到深度学习融合实现
  • 光功率dBm为何是负数?一文详解
  • Effective C++ 条款35:考虑 virtual函数以外的其他选择
  • Spring源码解析 - SpringApplication run流程-prepareContext源码分析
  • MD5:理解MD5 / MD5核心特性 / MD5 在前端开发中的常见用途 / 在线生成MD5 / js-md5
  • Linux Docker 运行SQL Server
  • loading效果实现原理
  • Elasticsearch Node.js 客户端的安装
  • 第六十一章:AI 模型的“视频加速术”:Wan视频扩散模型优化
  • 简单清晰的讲解一下RNN神经网络
  • HarmonyOS 开发入门 第一章
  • 力扣面试150题--阶乘后的零,Pow(x,n)直线上最多的点
  • Win10电脑密码忘记如何进入操作系统
  • 基于AS32S601芯片的商业卫星光纤放大器(EDFA)抗单粒子效应解决方案研究
  • 前端组件库双雄对决:Bootstrap vs Element UI 完全指南
  • Speech Databases of Typical Children and Children with SLI 数据集解读
  • 飞轮储能和超级电容综合对比分析
  • LintCode第1181题-二叉树的直径
  • VBA即用型代码手册:计算选择的单词数Count Words in Selection
  • (Arxiv-2025)Phantom-Data:迈向通用的主体一致性视频生成数据集
  • MathType关联Wps实现公式编辑【Tex语法适配】