nginx实例

news2024/11/26 14:54:31

nginx的由来
Nginx是由1994年毕业于俄罗斯国立莫斯科鲍曼科技大学的同学为俄罗斯rambler.ru公司开发的,开发工作最早从2002年开始,第一次公开发布时间是2004年10月4日,版本号是0.1.0。2019年3月11日F5 与 NGINX达成协议,F5 将收购 NGINX 的所有已发行股票,总价值约为 6.7 亿美元。6.7亿美金约合44.97亿人民币,nginx核心模块代码长度198430(包括空格、注释),所以一行代码约为2.2万人民币。官网地址 www.nginx.org
nginx的作用
Nginx 是高性能的 HTTP 和反向代理的web服务器,处理高并发能力是十分强大的,能经受高负载的考验,有报告表明能支持高达 50,000 个并发连接数。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。Nginx 可以作为静态页面的 web 服务器,同时还支持 CGI 协议的动态语言,比如 perl、php 等。但是不支持 java。Java 程序只能通过与 tomcat 配合完成。Nginx 专为性能优化而开发, 性能是其最重要的考量,实现上非常注重效率 ,能经受高负载的考验,有报告表明能支持高 达 50,000 个并发连接数。
nginx和apache的对比
1.Nginx 配置简洁, Apache 复杂 ;Nginx 静态处理性能比 Apache 高 2倍以上 ;
2.Apache 对 PHP 支持比较简单,Nginx 需要配合其他后端用;Apache 的组件比 Nginx 多 ;
3.apache是同步多进程模型,一个连接对应一个进程;Nginx是异步的,多个连接(万级别)可以对应一个进程;
4.Nginx处理静态文件好,耗费内存少;动态请求由apache去做,Nginx只适合静态和反向;
5.Nginx适合做前端服务器,负载性能很好;Nginx本身就是一个反向代理服务器 ,且支持负载均衡。
两者最核心的区别在于 apache 是同步多进程模型,一个连接对应一个进程,而 nginx 是异步的,多个连接(万级别)可以对应一个进程
一般来说,需要性能的 web 服务,用 nginx 。如果不需要性能只求稳定,更考虑 apache ,后者的各种功能模块实现得比前者,例如 ssl 的模块就比前者好,可配置项多。epoll(freebsd 上是 kqueue ) 网络 IO 模型是 nginx 处理性能高的根本理由,但并不是所有的情况下都是 epoll 大获全胜的,如果本身提供静态服务的就只有寥寥几个文件,apache 的 select 模型或许比 epoll 更高性能。当然,这只是根据网络 IO 模型的原理作的一个假设,真正的应用还是需要实测了再说的。
更为通用的方案是,前端Nginx抗并发,后端apache集群,配合起来会更好。
nginx的安装
nginx一般不用yum安装,因为linux内置版本太老。一般用安装包安装。
官方源码包下载地址:https://nginx.org/en/download.html

 dnf install gcc pcre-devel zlib-devel openssl-devel -y		#先下载所需命令
 mkdir nginx
 tar zxf nginx-1.26.2
 cd nginx-1.26.2
 useradd  -s /sbin/nologin -M nginx
 
 ./configure  --prefix=/usr/local/nginx \
 --user=nginx \ 	#指定nginx运行用户
 --group=nginx \	#指定nginx运行组
 --with-http_ssl_module \		#支持https://
 --with-http_v2_module \		 #支持http版本2
 --with-http_realip_module \		#支持ip透传
 --with-http_stub_status_module \		 #支持状态页面
 --with-http_gzip_static_module \ 		 #支持压缩
 --with-pcre \		#支持正则 
 --with-stream \	#支持tcp反向代理
 --with-stream_ssl_module \		#支持tcp的ssl加密
 --with-stream_realip_module		#支持tcp的透传ip

make && make install

nginx安装后会有四个主要目录

 ls /usr/local/nginx/
 conf  html  logs  sbin


conf:保存nginx所有的配置文件,其中nginx.conf是nginx服务器的最核心最主要的配置文件,其他的.conf则是用来配置nginx相关的功能的,例如fastcgi功能使用的是fastcgi.conf和fastcgi_params两个文件,配置文件一般都有一个样板配置文件,是以.default为后缀,使用时可将其复制并将default后缀去掉即可。
html目录中保存了nginx服务器的web文件,但是可以更改为其他目录保存web文件,另外还有一个50x的web文件是默认的错误页面提示页面。
logs:用来保存nginx服务器的访问日志错误日志等日志,logs目录可以放在其他路径,比如/var/logs/nginx里面。
sbin:保存nginx二进制启动脚本,可以接受不同的参数以实现不同的功能。
验证版本及编译参数

vim ~/.bash_profile
export PATH=$PATH:/usr/local/nginx/sbin		#添加在最后

source  ~/.bash_profile

nginx -V
nginx version: nginx/1.24.0
built by gcc 11.4.1 20231218 (Red Hat 11.4.1-3) (GCC)
built with OpenSSL 3.0.7 1 Nov 2022
TLS SNI support enabled
configure arguments: --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 

nginx -g "daemon off;"

nginx启动文件

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

systemctl daemon-reload
systemctl start nginx

用systemctl start nginx启动时,如果linux内已经有了nginx进程,要先删除nginx进程,再启动。
nginx版本的平滑升级和回滚
在这里插入图片描述
nginx 方便地帮助我们实现了平滑升级。其原理简单概括,就是: (1)在不停掉老进程的情况下,启动新进程。 (2)老进程负责处理仍然没有处理完的请求,但不再接受处理请求。 (3)新进程接受新请求。 (4)老进程处理完所有请求,关闭所有连接后,停止。 这样就很方便地实现了平滑升级。一般有两种情况下需要升级 nginx,一种是确实要升级 nginx 的版本,另一种是要为 nginx 添加新的模块。

平滑升级

 tar zxf nginx-1.26.2.tar.gz
 cd nginx-1.26.1/
 
./configure --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				#编译新版本

make		#无需make install 

ll  objs/nginx /usr/local/nginx/sbin/nginx			#查看新旧两个版本的nginx

cd /usr/local/nginx/sbin/
cp nginx nginx.24			#备份旧版nginx命令

\cp  -f /root/nginx/nginx-1.26.1/objs/nginx		#复制到新版nginx

nginx -t 		#检测一下有没有问题

kill -USR2 48732 #nginx worker ID
#USR2 平滑升级可执行程序,将存储有旧版本主进程PID的文件重命名nginx.pid.oldbin,并启动新的nginx
#此时两个master的进程都在运行,只是旧的master不在监听,由新的master监听80 #此时Nginx开启一个新的master进程,这个master进程会生成新的worker进程,这就是升级后的Nginx进程,此时老的进程不会自动退出,但是当接收到新的请求不作处理而是交给新的进程处理

ps aux | grep nginx		#查看nginx进程
curl -I  localhost 			#查看是哪个版本生效

kill -WINCH 48732		#回收旧版本(删除旧版本进程)

curl  -I localhost 			#再次检测版本

回退(发现新版本有问题时,可以回退至旧版本)

cp nginx nginx.26		#复制新版本的nginx
mv nginx.24 nginx		#覆盖新版本的nginx

ps aux | grep nginx		#查看现在的nginx进程

kill -WINCH 52075		#杀死新版本的进程

curl  -I  localhost			#查看nginx版本

nginx配置
nginx主配置文件格式

main block:主配置段,即全局配置段,对http,mail都有效
#事件驱动相关的配置
event {
 ...
 }  
#http/https 协议相关配置段
http {
默认的nginx.conf 配置文件格式说明
 ...
 } 
#默认配置文件不包括下面两个块
#mail 协议相关配置段
mail {
 ...
 }
 #stream 服务器相关配置段
stream {
 ...
 } 

默认的nginx.conf 配置文件格式说明

#全局配置端,对全局生效,主要设置nginx的启动用户/组,启动的工作进程数量,工作模式,Nginx的PID路
径,日志路径等。
user nginx nginx;
worker_processes  1;    #启动工作进程数数量
events { #events        #设置快,主要影响nginx服务器与用户的网络连接,比如是否允许同时接受多个网络连接,使用哪种事件驱动模型                        #处理请求,每个工作进程可以同时支持的
最大连接数,是否开启对多工作进程下的网络连接进行序列化等。
     worker_connections  1024;   #设置单个nginx工作进程可以接受的最大并发,作为web服务器的时候最大并发数为                                           #worker_connections * 
worker_processes,作为反向代理的时候为
                                 #(worker_connections * worker_processes)/2
 }
http {                          #http块是Nginx服务器配置中的重要部分,缓存、代理和日志格
式定义等绝大多数功能和第三方模块                                #可以在这设置,http块可以包含多个server块,而一个server块中又可以包含多个location块,
                                #server块可以配置文件引入、MIME-Type定义、日志自定义、是
否启用sendfile、连接超时时间和                                 #单个链接的请求上限等。
   include       mime.types;
   default_type application/octet-stream;
   sendfile       on;           #作为web服务器的时候打开sendfile加快静态文件传输,指定是否使用
                                #sendfile系统调用来传输文件
                                #sendfile系统调用在两个文件描述符之间直接传递数据(完全在
内核中操作)
                                #从而避免了数据在内核缓冲区和用户缓冲区之间的拷贝,操作效率很高,被称之为零拷贝,
                                #硬盘 >> kernel buffer (快速拷贝到kernelsocket buffer) >>协议栈。
                                
   keepalive_timeout  65;       #长连接超时时间,单位是秒
server {                     #设置一个虚拟机主机,可以包含自己的全局快,同时也可以包含多个location模块
                                #比如本虚拟机监听的端口、本虚拟机的名称和IP配置,多个
server 可以使用一个端口比如都使用                                #80端口提供web服务
                                
       listen       80;         #配置server监听的端口
	   server_name localhost;   #本server的名称,当访问此名称的时候nginx会调用当前serevr
内部的配置进程匹配。
       
       location / {             #location其实是server的一个指令,为nginx服务器提供比较
多而且灵活的指令
                                #都是在location中体现的,主要是基于nginx接受到的请求字符
串
                                #对用户请求的UIL进行匹配,并对特定的指令进行处理
                                #包括地址重定向、数据缓存和应答控制等功能都是在这部分实现
                                #另外很多第三方模块的配置也是在location模块中配置。
                                
           root   html;         #相当于默认页面的目录名称,默认是安装目录的相对路径,可以使
用绝对路径配置。
           index index.html index.htm;          #默认的页面文件名称
                 }
       error_page   500 502 503 504 /50x.html;  #错误页面的文件名称
       location = /50x.html {                   #location处理对应的不同错误码的页面定义到/50x.html
                                                #这个跟对应其server中定义的目录下。
           root   html;                         #定义默认页面所在的目录
       }
   }
    
#和邮件相关的配置
#mail {
 #               ...
 #       }         mail 协议相关配置段
#tcp代理配置,1.9版本以上支持
#stream {
 #               ...
 #       }       stream 服务器相关配置段
#导入其他路径的配置文件
#include /apps/nginx/conf.d/*.conf
 }

新建一个web站点

mkdir  /usr/local/nginx/conf.d/
vim /usr/local/nginx/conf/nginx.conf
http {
  ......
include /usr/local/nginx/conf.d/*.conf;  		#不能放在前面,会导致前面的命令不能执行   

}

vim /usr/local/nginx/conf.d/vhosts.conf
server {
		listen 80;
		server_name www.kkk.org;
		root  /web/data/html;
		index index.html;
		location / {
					root /data/web/html;
					}
}
mkdir /data/web/html
echo kkk > /data/web/html/index.html

curl www.kkk.org
kkk

root与alias
root:指定web的家目录,在定义location的时候,文件的绝对路径等于root+location
alias:定义路径别名,会把访问的路径重新定义到其指定的路径,文档映射的另一种机制;仅能用于location上下文,此指令使用较少

location的详细使用
1.在一个server中location配置段可存在多个,用于实现从uri到文件系统的路径映射;
2.ngnix会根据用户请求的URI来检查定义的所有location,按一定的优先级找出一个最佳匹配,而后应用其配置在没有使用正则表达式的时候,nginx会先在server中的多个location选取匹配度最高的一个uri
3.uri是用户请求的字符串,即域名后面的web文件路径
4.然后使用该location模块中的正则url和字符串,如果匹配成功就结束搜索,并使用此location处理此请求。

语法规则

location [ = | ~ | ~* | ^~ ] uri { ... }
 =           			#用于标准uri前,需要请求字串与uri精确匹配,大小敏感,如果匹配成功就停止向下匹配并立即处理请求
^~          			#用于标准uri前,表示包含正则表达式,并且匹配以指定的正则表达式开头
						#对uri的最左边部分做匹配检查,不区分字符大小写
~  					#用于标准uri前,表示包含正则表达式,并且区分大小写         
~*          			#用于标准uri前,表示包含正则表达式,并且不区分大写
不带符号			#匹配起始于此uri的所有的uri
\            			#用于标准uri前,表示包含正则表达式并且转义字符。可以将 . * ?等转义为普通符号


#匹配优先级从高到低:
=, ^~, ~/~*, 不带符号

nginx账户认证

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

cat /usr/local/nginx/.htpasswd
admin:~~~~~~~~~

httpasswd -m /usr/local/nginx/.httpasswd leo

vim /usr/local/nginx/conf.d/vhost.conf
server {
		listen 80;
		server_name www.kkk.org;
		root /data/web/html;
		index index.html;

		location /leo {
					root /data/web;
					auth_basic "password";
					auth_basic_user_file "usr/local/nginx/.htpasswd"
					}
}

nginx -s reload

在这里插入图片描述

自定义错误页面

server {
		listen 80;
		server_name www.kkk.org;
		root /data/web/html;
		index index.html;
		error_page 404 /40x.html;
		error_log /var/log/kkk.org/error.log
		access_log /var/log/kkk.org/access.log

		location /leo {
					root /data/web;
					auth_basic "password";
					auth_basic_user_file "usr/local/nginx/.htpasswd"

		location = /40x.html {
					root /data/web/errorpage;
					}
}


curl www.kkk.org
error page

作为下载服务器

server {
		listen 80;
		server_name www.kkk.org;
		root /data/web/html;
		index index.html;
		error page 404 /40x.html;
		error log /var/log/timinglee.org/error.log;
		access log /var/log/timinglee.org/access.log;

		locaton /leo {
				root /data/web/;
				auth basic "login password !!";
				auth basic user file "/usr/local/nginx/.htpasswd";
				}
			
		location = /40x.html {
				root /data/web/errorpage;
				}
		location /downloadfroot {
				root /data/web; 
				autoindex on;
				autoindex localtime on;
				autoindexexact size off;
				limit rate 1024k;
				}
	}			
		

ngx_http_rewrite_module 模块指令
if指令
用于条件匹配判断,并根据条件判断结果选择不同的Nginx配置,可以配置在server或location块中进行配置,Nginx的if语法仅能使用if做单次判断,不支持使用if else或者if elif这样的多重判断。用法如下:

if (条件匹配) { 
action
 }

使用正则表达式对变量进行匹配,匹配成功时if指令认为条件为true,否则认为false,变量与表达式之间使用以下符号链接:

=       #比较变量和字符串是否相等,相等时if指令认为该条件为true,反之为false
!=       #比较变量和字符串是否不相等,不相等时if指令认为条件为true,反之为false
~       #区分大小写字符,可以通过正则表达式匹配,满足匹配条件为真,不满足匹配条件为假
!~      #区分大小写字符,判断是否匹配,不满足匹配条件为真,满足匹配条件为假
~*      #不区分大小写字符,可以通过正则表达式匹配,满足匹配条件为真,不满足匹配条件为假
!~*     #不区分大小字符,判断是否匹配,满足匹配条件为假,不满足匹配条件为真



-f 和 !-f 		#判断请求的文件是否存在和是否不存在
-d 和 !-d		#判断请求的目录是否存在和是否不存在
-x 和 !-x       #判断文件是否可执行和是否不可执行
 -e 和 !-e      #判断请求的文件或目录是否存在和是否不存在(包括文件,目录,软链接)

#注意:
#如果$变量的值为空字符串或0,则if指令认为该条件为false,其他条件为true。
#nginx 1.0.1之前$变量的值如果以0开头的任意字符串会返回false

set指令
指定key并给其定义一个变量,变量可以调用Nginx内置变量赋值给key
另外set定义格式为set $key value,value可以是text, variables和两者的组合。

break指令
用于中断当前相同作用域(location)中的其他Nginx配置
与该指令处于同一作用域的Nginx配置中,位于它前面的配置生效
位于后面的 ngx_http_rewrite_module 模块中指令就不再执行
Nginx服务器在根据配置处理请求的过程中遇到该指令的时候,回到上一层作用域继续向下读取配置
该指令可以在server块和locationif块中使用
注意: 如果break指令在location块中后续指令还会继续执行,只是不执行 ngx_http_rewrite_module模块的指令,其它指令还会执行

return指令
return用于完成对请求的处理,并直接向客户端返回响应状态码,比如:可以指定重定向URL(对于特殊重定向状态码,301/302等) 或者是指定提示文本内容(对于特殊状态码403/500等),处于此指令后的所有配置都将不被执行,return可以在server、if 和 location块进行配置
语法格式

return code;        #返回给客户端指定的HTTP状态码

return code [text];   #返回给客户端的状态码及响应报文的实体内容
                      #可以调用变量,其中text如果有空格,需要用单或双引号
return code URL;      #返回给客户端的URL地址

rewrite指令
通过正则表达式的匹配来改变URI,可以同时存在一个或多个指令,按照顺序依次对URI进行匹配
rewrite主要是针对用户请求的URL或者是URI做具体处理
rewrite将用户请求的URI基于regex所描述的模式进行检查,匹配到时将其替换为表达式指定的新的URI
注意:如果在同一级配置块中存在多个rewrite规则,那么会自下而下逐个检查;被某条件规则替换完成后,会重新一轮的替换检查,隐含有循环机制,但不超过10次;如果超过,提示500响应码,[flag]所表示的标志位用于控制此循环机制
如果替换后的URL是以http://或https://开头,则替换结果会直接以重定向返回给客户端, 即永久重定向301
语法格式

rewrite regex replacement [flag];

正则表达式格式

.       #匹配除换行符以外的任意字符
\w     #匹配字母或数字或下划线或汉字 
\s      #匹配任意的空白符
\d      #匹配数字
\b      #匹配单词的开始或结束
^       #匹配字付串的开始
$       #匹配字符串的结束
*       #匹配重复零次或更多次
+       #匹配重复一次或更多次
?       #匹配重复零次或一次
(n)     #匹配重复n次
{n,}    #匹配重复n次或更多次
{n,m}   #匹配重复n到m次
*?      #匹配重复任意次,但尽可能少重复
+?      #匹配重复1次或更多次,但尽可能少重复
??      #匹配重复0次或1次,但尽可能少重复
{n,m}?  #匹配重复n到m次,但尽可能少重复
{n,}?   #匹配重复n次以上,但尽可能少重复
\W      #匹配任意不是字母,数字,下划线,汉字的字符
\S      #匹配任意不是空白符的字符
\D      #匹配任意非数字的字符
\B      #匹配不是单词开头或结束的位置
[^x]    #匹配除了x以外的任意字符

rewrite flag 的使用
利用nginx的rewrite的指令,可以实现url的重新跳转,rewrite有四种不同的flag,分别是redirect(临时重定向302)、permanent(永久重定向301)、break和last。其中前两种是跳转型的flag,后两种是代理型
跳转型指由客户端浏览器重新对新地址进行请求
代理型是在WEB服务器内部实现跳转

rewrite格式

Syntax: rewrite regex replacement [flag];   #通过正则表达式处理用户请求并返回替换后的数据包。
Default: —
 Context: server, location, if

flag说明

redirect;
#临时重定向,重写完成后以临时重定向方式直接返回重写后生成的新URL给客户端
#由客户端重新发起请求;使用相对路径,或者http://或https://开头,状态码:302
permanent;
#重写完成后以永久重定向方式直接返回重写后生成的新URL给客户端
#由客户端重新发起请求,状态码:301
break;
#重写完成后,停止对当前URL在当前location中后续的其它重写操作
#而后直接跳转至重写规则配置块之后的其它配置,结束循环,建议在location中使用
#适用于一个URL一次重写
last;
#重写完成后,停止对当前URI在当前location中后续的其它重写操作,
#而后对新的URL启动新一轮重写检查,不建议在location中使用
#适用于一个URL多次重写,要注意避免出现超过十次以及URL重写后返回错误的给用户

nginx防盗链
防盗链基于客户端携带的referer实现,referer是记录打开一个页面之前记录是从哪个页面跳转过来的标记信息,如果别人只链接了自己网站图片或某个单独的资源,而不是打开了网站的整个页面,这就是盗链,referer就是之前的那个网站域名,正常的referer信息有:

none:	#请求报文首部没有referer首部,
        #比如用户直接在浏览器输入域名访问web网站,就没有referer信息               
blocked:            #请求报文有referer首部,但无有效值,比如为空。
server_names:       #referer首部中包含本主机名及即nginx 监听的server_name。
arbitrary_string:   #自定义指定字符串,但可使用*作通配符。示例: *.timinglee.org 
www.timinglee.*

regular expression: #被指定的正则表达式模式匹配到的字符串,要使用~开头,例如:
~.*\.timinglee\.com

实现盗链
在一个web 站点盗链另一个站点的资源信息,比如:图片、视频等

#盗链网页
<html>

  <head>
    <meta http-equiv=Content-Type content="text/html;charset=utf-8">
    <title>盗链</title>
</head>

  <body>
    <img src="http://www.timinglee.org/images/lee.png" >
    <h1 style="color:red">欢迎大家</h1>
    <p><a href=http://www.timinglee.org>狂点老李</a>出门见喜</p>
  </body>

</html>

实现防盗链
基于访问安全考虑,nginx支持通过ngx_http_referer_module模块,检查访问请求的referer信息是否有效实现防盗链功能

server {
    listen 80;
    listen 443 ssl;
    server_name www.timinglee.org;
    root /data/web/html;
    index index.html;
    ssl_certificate /usr/local/nginx/certs/timinglee.org.crt;
    ssl_certificate_key /usr/local/nginx/certs/timinglee.org.key;
    ssl_session_cache    shared:SSL:1m;
    ssl_session_timeout  5m;

    location / {
        if ( $scheme = http ){
            rewrite /(.*) https://$host/$1 redirect;
        }

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


#防盗链

    location /images  {
        valid_referers none blocked server_names *.timinglee.org ~/.baidu/.;
        if ( $invalid_referer ){
                rewrite ^/   http://www.timinglee.org/daolian.png;
        }

    }


#盗链网页
<html>

  <head>
    <meta http-equiv=Content-Type content="text/html;charset=utf-8">
    <title>盗链</title>
</head>

  <body>
    <img src="http://www.timinglee.org/images/lee.png" >
    <h1 style="color:red">欢迎大家</h1>
    <p><a href=http://www.timinglee.org>狂点老李</a>出门见喜</p>
  </body>

</html>

安装php

yum install -y bzip2 systemd-devel libxml2-devel sqlite-devel libpng-devel libcurl-devel oniguruma-devel

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

php测试页面

server {
      listen 80;
      server_name www.kkk.org;
      root /data/web/php;
      index index.html; 

      location /leo {
                root /data/web;
                auth_basic "password";
                auth_basic_user_file "usr/local/nginx/.htpasswd";
        }

}

mkdir  /data/web/php
touch  /data/web/php/index.php

vim /data/web/php/index.php
<?php
 phpinfo();
 ?>

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2061013.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

NSSCTF联系记录:[SWPUCTF 2021 新生赛]crypto7

题目&#xff1a; 一共有32个字符&#xff0c;且只有数字和字母&#xff0c;可能为md5加密 得到答案

Linux shell编程学习笔记74:sed命令——沧海横流任我行(中)

0 前言 自 60 年代末以来&#xff0c;sed 一直是 Unix 标准工具箱的一部分。 Sed在以下三种情况下特别有用&#xff1a; 编辑太大的文件&#xff0c;无法进行舒适的交互式编辑&#xff1b; 当编辑命令序列过于复杂而无法在交互模式下轻松键入时&#xff0c;可以编辑任何大小的…

【学习笔记】Day 20

一、进度概述 1、机器学习常识12-18&#xff0c;以及相关代码复现 二、详情 12、SVM&#xff08;support vector machines&#xff0c;支持向量机&#xff09; 实际上&#xff0c;支持向量机是一种二分类模型&#xff0c;它将实例的特征向量映射为空间中的一些点&#xff0c;…

[C语言]-基础知识点梳理-文件管理

前言 各位师傅们好&#xff0c;我是qmx_07&#xff0c;今天给大家讲解文件管理的相关知识&#xff0c;也就是常见的 读取&#xff0c;删除一类的操作 文件 为什么要使用文件&#xff1f; 程序的数据是存储在电脑的内存中&#xff0c;如果程序退出&#xff0c;内存回收&…

基于django的学生作业提交与管理系统,有管理后台,可作为课设使用

在本项目中&#xff0c;我们设计并实现了一个基于Django框架的学生作业提交与管理系统&#xff0c;旨在为教师和学生提供一个高效、便捷的作业管理平台。Django作为一个高效的Web框架&#xff0c;因其强大的功能和灵活的架构&#xff0c;使得本系统能够快速开发并扩展。 系统功…

KeyShot 2024.2:卓越的Mac与Windows 3D渲染与动画制作软件

KeyShot 2024.2作为一款专为Mac和Windows用户设计的3D渲染与动画制作软件&#xff0c;凭借其出色的性能和丰富的功能&#xff0c;在业界树立了新的标杆。这款软件不仅继承了KeyShot系列一贯的实时渲染和动画优势&#xff0c;还在多个方面进行了全面升级和优化&#xff0c;为3D设…

C++:二叉搜索树(binary search tree)

目录 1&#xff1a; 二叉搜索树概念 2&#xff1a;二叉搜索树操作 3&#xff1a;二叉树的模拟实现 4&#xff1a;二叉搜索树的应用 5&#xff1a;二叉搜索树的性能分析 6&#xff1a;复习前中后序遍历 7&#xff1a;二叉树进阶面试题 1&#xff1a; 二叉搜索树概念 二叉搜…

基于协同过滤算法的体育商品推荐系统_t81xg

TOC springboot618基于协同过滤算法的体育商品推荐系统_t81xg--论文 绪 论 近年来&#xff0c;随着互联网科技的进步和发展&#xff0c;人们的生活水平得到了极大的提高&#xff0c;图书的数量也在快速增加&#xff0c;以至于体育商品推荐的数量不断扩大&#xff0c;管理个性…

嵌入式学习——(Linux高级编程——线程)

线程 一、pthread 线程概述 pthread&#xff08;POSIX threads&#xff09;是一种用于在程序中实现多线程的编程接口。它与进程一样&#xff0c;可以用于实现并发执行任务&#xff0c;但与进程相比有一些不同的特点。 二、优点 1. 比多进程节省资源&#xff1a;进程在创建时…

如何用Java SpringBoot+Vue搭建太原学院商铺管理系统【实战教程】

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

【中项第三版】系统集成项目管理工程师 | 第 12 章 执行过程组

前言 本章属于10大管理的内容&#xff0c;上午题预计会考8-10分&#xff0c;下午案例分析也会进行考查。学习要以教材为主。 目录 12.1 指导与管理项目工作 12.1.1 主要输入 12.1.2 主要输出 12.2 管理项目知识 12.2.1 主要输入 12.2.2 主要输出 12.3 管理质量 12.3.…

新160个crackme - 037-fireworx.2

运行分析 图标是火炬&#xff0c;估计是Delphi程序&#xff0c;需要破解Name和Serial PE分析 Delphi程序&#xff0c;32位&#xff0c;无壳 静态分析&动态调试 - ida找到关键字符串&#xff0c;双击进入 ida动态调试&#xff0c;LStrCatN是一个拼接函数Serial v10 Name …

兴顺物流管理系统pf

TOC springboot539兴顺物流管理系统pf 第一章 课题背景及研究内容 1.1 课题背景 信息数据从传统到当代&#xff0c;是一直在变革当中&#xff0c;突如其来的互联网让传统的信息管理看到了革命性的曙光&#xff0c;因为传统信息管理从时效性&#xff0c;还是安全性&#xff…

VAuditDemo审计之安装教学

目录 Xampp安装VAditDemo 第一步&#xff1a; 第二步&#xff1a; 第三步&#xff1a; 第四步&#xff1a; 第五步&#xff1a; 第六步&#xff1a; 第七步&#xff1a; 第八步&#xff1a; Xampp安装VAditDemo 第一步&#xff1a; 解压VAuditDemo 先上传好zip文件…

PL3322B 升级为PC3322C

PL3322C 是一款高效率、高集成度、原边调节的电源驱动芯片&#xff0c;PL3322C可去除光耦以及次级控制电路&#xff0c;简化了充电器/适配器等传统的恒流/恒压的设计&#xff0c;高精度的电压和电流调节。PL3322C提供SOT23-6封装&#xff1b;PL3322C集成多种保护功能&#xff0…

ffmpeg6.1集成Plus-OpenGL-Patch滤镜

可参考上一篇文章。ffmpeg6.1集成ffmpeg-gl-transition滤镜-CSDN博客 安装思路大致相同&#xff0c; 因为 Plus-OpenGL-Patch也是基于 ffmpeg 4.x 进行开发的&#xff0c;所以在高版本上安装会有很多报错。 这是我安装后的示例&#xff0c;需要安装教程或者改代码可私信我。 …

工程技术研究杂志工程技术研究杂志社工程技术研究编辑部2024年第12期目录

工程前沿 基于Midas Civil的钢结构人行天桥荷载试验和承载力评价 陈新祥;刘欣;吕美忠; 1-5 基于价值工程理论的基坑支护方案优选 王晓毅;吴军杰; 6-8 建筑工程桩基检测中存在的问题及优化策略研究 张旭;李德君; 9-11 挤密桩参数对黄土地基加固效果的影响研究 杨…

开源介绍 - html2canvas

What is html2canvas &#xff1f; The script allows you to take “screenshots” of webpages or parts of it, directly on the users browser. The screenshot is based on the DOM and as such may not be 100% accurate to the real representation as it does not mak…

Java 入门指南:集合概述

Java集合概述 Java 集合&#xff08;Collections&#xff09;是 Java 中提供的一种容器&#xff0c;用于存储和管理多个对象。与数组不同&#xff0c;集合的长度是可变的&#xff0c;且只能存储对象&#xff08;包括对象的引用&#xff09;&#xff0c;不能存储基本数据类型。…

jmeter中导入java方法并使用

1、首先打开idea&#xff0c;在idea中点击File-New-Project ,创建一个项目&#xff0c;项目名为JmtOne 2、项目创建完成后&#xff0c;直接在main函数中定义两个方法&#xff0c;记住该主函数的包名跟类名&#xff0c;后面会用到&#xff0c;在类中定义了两种拆分字符串的方法&…