13.if上下文
通常定义在location或server上下文中
语法:if (condition条件) {.动作.....} 满足条件做什么动作
应用环境:server,location
condition:
1变量名(变量值为空时,或者以“0”开始,即为false,其他的均为true)
2以变量为基础的比较表达式
③可基于正则表达式模式匹配
~:区分大小写模式匹配
~*:不区分大小写的模式匹配检查
④测试一个文件名是否为普通文件 -f !-f -f a a文件存在为真 !-f a a文件不存在为真
⑤测试指定目录是否存在 -d !-d
⑥测试文件是否存在:-e !-e
⑦检查文件是否有执行权:-x !-x
例如:if ($http_user_agent ~* MSIE) { `判别条件
rewrite ^(.*)$ /msie/$1 break; `执行动作
}
if ($request_method = POST) {
return 405;
}
1.基于URL重写写一个if判断语句,如果ccc目录中有index.html文件就不重定向zzz了
vim /etc/nginx/nginx.conf
location / {
root html;
index index.html index.htm
if (!-e $document_root/ccc/index.html) 如果这个文件存在不跳转 !-e 不存在就跳转
#$document_root为/usr/local/nginx/html,可修改为真实路径
{
rewrite ^/ccc/(.*)$ /zzz/$1 break; 如果ccc条件不成立 ,就会调转zzz目录下
}
}
测试,在ccc没有index.html时访问http://web.ujiuye.com/ccc/, 跳转到ZZZ目录下的网页
在ccc中创建index.html,再访问测试 http://192.168.10.10/ccc/
cd /usr/local/nginx/html/
cd ccc/
vim index.html
14.防盗链
location ~* \.(gif|jpg|jpeg)$ { 不区分大小写 ,如果是以gif jpg jepg结尾的
root "/www/images";到这个目录去查找
valid_referers none blocked *.ujiuye.com ujiuye.* ~\.ujiuye\.; 合理正常访问访问 ,以ujiuye.com结尾的 以ujiuye. 开头的 中间包含ujiuye的小写 (安全规则设置)
if ($invalid_referer) { -除了符合上面referer 这条 其余都重写
rewrite ^/ http://www.ujiuye.com/daolian.png break; 以 / 开头的所有访问 都重定向到这个网站下面 返回这条网页信息 break 跳出结束
}
}
1.)配置盗链非法主机,盗用合法主机nginx的kkk.jpg图片,可使用httpd盗图片,在nginx的html下放置kkk.jpg:
vim /var/www/html/index.html
systemctl restart httpd
<body>
<h1>test daolian</h1>
<p>web test</p>
</br>
<img src="http://192.168.10.10/welcome.jpg"></br> /为根目录 /usr/localnginx/html
<a href="http://ip">www.ujiuye.com</a>
</body>
httpd测试盗图效果
http://192.168.10.11/ 盗链主机的IP测试 盗10.10主机的图片
2.)nginx配置nginx防盗链:
vim /etc/nginx/nginx.conf
cd /usr/local/nginx/html/
mkdir ddd
cp /root/ujiuye.png ./
location ~* \.(jpg|gif|jp?g)$ { 有人请求图片
root "/html/txt";
valid_referers none blocked 192.168.10.10; 合法正常访问 (ip或者域名)
if ( $invalid_referer ) 非法访问 除了上面符合这个条件 ,其余都重定向,到下面这个网页
{
rewrite ^/ http://192.168.10.10/ddd/ujiuye.png break; 重定向返回ddd目录下的图片
}
index index.html index.htm;
}
测试防盗效果。
15.nginx定制访问日志格式
log_format指定的格式,解开注释,并在后续日志文件定义中使用main即可,如:
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
远程主机 的ip 用户请求
'$status $body_bytes_sent "$http_referer" '
状态 报文 请求头
'"$http_user_agent" "$http_x_forwarded_for"';
用户浏览器 客户端真实来源ip
access_log logs/web.access.log main; 这个文件不存在,解开注解需要手动建立目录和文件
Logs根路径为/usr/local/nginx/ main表示类型
vim /etc/nginx/nginx.conf
cd /usr/local/nginx/
mkdir logs
touch access.log --创建目录和文件log
chown -R nginx:nginx logs/--修改主组和属组
ls -l
nginx -s reload --刷新查看
网页访问查看 http://192.168.10.10
tail access.log 说明访问了一次
什么主机 时间 访问了一次
1.网络连接相关的配置:
keepalive_timeout x; 长连接能允许请求超时时长,默认75s;
keepalive_requests x; 一个长连接所能够允许请求的最大资源数
keepalive_disable [msie8 | safari | none]; 为指定类型的User Agent禁用长连接;
client_header_timeout ; 读取http请求报文首部的超时时长
client_body_timeout ; 读取http请求报文body主体部分的超时时长
send_timeout ; 发送响应报文的超时时长
例如
vim /etc/nginx/nginx.conf
http://192.168.10.10/
16.Nginx网页其他优化
1.)网页缓存
在http、server、location配置区域均可配置 缓存
输入参数expires即可,
vim /etc/nginx/nginx.conf
location ~* \.(jpg|gif|jp?g)$ {
root "/html/txt";
expires 1d; 这些图片会缓存一天
valid_referers none blocked 192.168.10.10;
if ( $invalid_referer )
{
rewrite ^/ http://192.168.10.10/ddd/ujiuye.png break;
}
index index.html index.htm;
}
访问
2.网页压缩
vim /etc/nginx/nginx.conf
在http配置段中将gzip压缩模块开启即可
gzip on; #开启gzip压缩功能
gzip_min_length 1k; #设置允许压缩的页面最小字节数
gzip_buffers 4 16k; #设置压缩缓冲区大小,此处设置为4个16K内存作为压缩结果流缓存(64K)
gzip_http_version 1.1; #压缩版本
gzip_comp_level 2; #设置压缩比率,最小为1,处理速度快,传输速度慢;9为最大压缩比,处理速度慢,传输速度快
gzip_types text/css text/xml application/javascript; #制定压缩的类型
gzip_vary on; #可以让前端的缓存服务器缓存经过gzip压缩的页面
find / -size +100k -name "*.html" -exec ls -lh {} \;
查找大于100k 以任意字符开头 .html结尾的文件
找到文件 放/usr/local/nginx/html/gzip.html 目录下 重命名
3.)修改版本号
在http配置段 下 加入server_tokens off;即可隐藏版本号,但无法彻底隐藏;
vim /etc/nginx/nginx.conf
server_tokens off;
17.LNMP架构搭建:本地yum安装nginx yum 联网 php mysql
1.)NGINX服务端 fastcgi的配置示例
vim /etc/nginx/nginx.conf
LNMP:php启用fpm模型前提,需要Nginx以代理的方式将PHP动态资源的请求交给fastcgi的9000端口进行处理,fastcgi由单独fpm模块进行处理。在主配置文件中的虚拟主机中,定义fastcgi区域
location ~ \.php$ { 请求资源以.PHP结尾的
root /usr/share/nginx/html; 网页根目录
fastcgi_pass 127.0.0.1:9000;交给本机的 9000 fpm服务来处理php请求
fastcgi_index index.php;指定首页为index.php 根目录下要有这个
fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html$fastcgi_script_name;
传给fastcgi的参数 网页请求的名字文件放置目录 即网页路径 请求脚本名字
include fastcgi_params;
}
Nginx和apache不同之处在于,nginx对动态资源的处理能力非常差,并且无法像apache一样以模块装载的方式连接php,需要以fpm方式进行连接php,来完成LNMP架构的部署。
2.)本地yum安装nginx 联网安装php mysql
yum -y install nginx
systemctl start nginx #启动nginx
systemctl enable nginx #设置开机启动
然后连接外网,安装
yum -y install epel-release 依赖包
安装php和mysql
yum -y install php mariadb mariadb-server mysql-devel php-mysql php-cgi php-mbstring php-gd php-fpm
安装php依赖组件
yum -y install autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel libidn libidn-devel openssl openssl-devel openldap openldap-devel nss_ldap openldap-clients openldap-servers
3.)网页nginx测试
关闭防火墙
vim /etc/nginx/nginx.conf 主配置文件
server {
listen 80;--侦听端口
server_name web.ujiuye.com; --网站名称
root /usr/share/nginx/html; --网页根路径
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location / {
}
网页查看
4.)fastcgi的配置 在 location的标签对下面写
之前已安装php相应的软件
vim /etc/nginx/nginx.conf --在locatio下增加下面这段
location ~ \.php$ {
root /usr/share/nginx/html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html$fastcgi_script_name;
include fastcgi_params;
}
5.)修改用户名和组名 vim /etc/php-fpm.d/www.conf 重启仨服务
将39、41行修改用户名和组名
这个可以改为 服务IP
重启服务
kill nginx
systemctl start nginx
systemctl restart nginx
systemctl start php-fpm
systemctl start mariadb
6.)创建php-mysql的连接 创建用户 忘记mysql密码
mysql--进入
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
允许root用户在任何地方登录 并使用数据库 密码为123456 远程
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY '123456' WITH GRANT OPTION;
允许root用户在本机登录 并使用数据库 密码为123456 本机
quit 退出
mysql -uroot -p123456 来登录
use mysql; ---进入库
show tables; ---查看库
select * from user \G; --查看user表的信息 \G 排序
7.)忘记mysql root密码
编辑配置文件/etc/my.cnf
加入内容
skip-grant-tables
重启mysql服务,生产环境中慎用
systemctl start mariadb
直接使用mysql命令进行登录
更新密码
use mysql;
update user set authentication_string="123456" where Host='localhost' and User='root';
去掉或者注释vim /etc/my.cnf中的
skip-grant-tables
8.)建立php和mysql的连接 vim test.php
vim test.php
<?php
$link=mysqli_connect('192.168.10.120','root','123456');
if($link)
echo "ok";
else
echo "not ok";
?>
本机ip为 192.168.10.120
http://192.168.10.120/index.php
netstat -ntulp | grep :9000 查看端口
http://192.168.10.120/test.php 说明有连接了
9.)创建数据库bbs runbbs用户 部署应用验证结构
create database bbs; 创建bbs数据库
grant all on bbs.* to "runbbs"@"%" identified by "123456";
bbs数据库 的所有表 任何机器都可以登录
FLUSH PRIVILEGES; 刷新权限
18.安装软件skruc
1.解压
unzip skyuc-3.4.2.zip
cd skyuc-3.4.2/
cp -rf src /usr/share/nginx/html/
cd /usr/share/nginx/html/
ls
将解压目录中src目录移动到网页根路径/usr/share/nginx/html/下,
2.)到客户端使用浏览器访问
192.168.10.120/src/index.php
然后根据引导即可
检查到目录权限不可写,到网页根路径下更改指定文件权限即可
chmod a+w /usr/share/nginx/src -R
或者
chmod a+w admincp/ -R
chmod a+w upload/ -R
chmod a+w templates/ -R
chmod a+w data -R
执行完成后将网页刷新一下
继续下一步
填写指定设置
根据指示到网页根路径下删除install目录,访问:http://192.168.10.120/src/index.php
进入管理员页面:
http://192.168.10.12/src/admincp/index.php
实验完成!
19.配置Nginx和Apache的动静分离 在安装一台LANP服务端
在企业级web服务应用中,通常Nginx用于纯静态的web服务,大部分情况下Nginx需要和apache结合,
前台静态资源由Nginx和Apache共同处理,后台有Apache和PHP进行处理,各司其职,形成Nginx和Apache的动静分离:LNAMP
Nginx和Apache本质上Nginx作为前端纯静态服务器,Apache作为后端服务器,结合使用PHP,动静分离,实质上实现的是Nginx的反向代理(Nginx的反向代理和缓存后面课程会详细讲到)
1.先构建一台nginx的静态web服务器,
以代理的方式,基于正则表达式 定向到后台的动态apache-php服务器-- LNAMP
vim /etc/nginx/nginx.conf
10.110为 LAMp的ip 代理
location ~ \.php$ {
proxy_pass http://192.168.10.11:80;
}
proxy_pass表示代理给后台的192.168.10.110主机
2.构建一台LAMP架构的主机 安装 hhtpd php mariadb
挂载CentOS-7-x86_64-Everything-1708.iso 搭建本地YUM源
开始安装httpd服务,更改配置,写入测试页验证静态服务是否可行
yum -y install httpd 配置网站名
安装php以及mariadb数据库,php结合数据库的驱动模块
yum -y install php php-mysql mariadb mariadb-server mysql-devel
并进行安装php所依赖的库和相关工具包
yum -y install php-gd libjpeg* php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc php-mbstring php-mcrypt php-bcmath php-mhash libmcrypt
其中,红色的包安装不了,解决方法:将服务器使用桥接模式或者nat连接到公网,可以访问公网。
yum -y install epel-release
yum -y install php-imap php-mcrypt libmcrypt
3.配置httpd 增加网站名称 让索引页支持php 重启服务使其php模块生效
vim /etc/httpd/conf/httpd.conf
重启服务,使其php模块生效
systemctl restart httpd
netstat -anutlp | grep :80
ps aux | grep httpd
4.编写PHP测试页,验证php和httpd的连接效果
cd /var/www/html/
vim index.html
<?php
phpinfo();
?>
在浏览器验证
5.将mariadb数据库的主配置文件做修改 启动数据库服务
cat /usr/share/mysql/my-medium.cnf > /etc/my.cnf
启动mariadb数据库服务
systemctl start mariadb.service
netstat -antulp | grep :3306 3306是否监听
ls /var/lib/mysql/mysql.sock
6.建立数据库进入数据库的命令行界面 创建root
root@client html]# mysql 进入数据库
修改数据库的账号和密码(一定要在mysql的解释器窗口)
delete from mysql.user where user=''; 清空空用户
update mysql.user set password=password('123456') where user='root';
grant all on *.* to 'root'@'%' identified by '123456';
允许root用户在任何地方登录 并使用数据库 密码为123456 远程
grant all on *.* to 'root'@'localhost' identified by '123456';
允许root用户在本机登录 并使用数据库 密码为123456 本机
flush privileges; 刷新权限
退出数据库,并将数据库进行重新重启
systemctl restart mariadb
7.验证php和mariadb数据库的连接 编写静态测试页
vim /var/www/html/test_mysql.php 编写测试页
<?php
$link=mysqli_connect('192.168.10.11','root','123456');
if($link)
echo "^_^ ok ^_^";
else
echo "T_T not ok T_T";
?>
网页访问验证php和mariadb数据库的连接效果
http://192.168.10.110/kkk.php
20.在网页根路径部署discuz论坛项目,验证LAMP架构可用性
1.进行unzip解压
unzip Discuz_X3.1_SC_UTF8.zip 解压
解压之后出现 upload目录 ,将其重命名并移动到网页根路径
cp -rf upload /var/www/html/discuz
2.为discuz项目提供后台数据库,以便于项目数据的便捷存储
进入mariadb数据命令行界面
mysql -u root -p --进入mysql
create database bbs; --创建bbs数据库
3.创建普通用户来管理discuz对应的bbs数据的所有数据
grant all on bbs.* to 'runbbs'@'%' identified by '123456';
把bbs .* 数据库里面 所有的表 给一个'runbbs' all所有的权限 '%使这个用户可以从任何终端登录 identified 主机 密码是1234536
flush privileges; 刷新
quit
4.更改php主配置文件,使其支持短格式选项
可在网页 php 那里找到php的主配置文件
vim /etc/php.ini
211 short_open_tag = On --支持短格式
重启httpd服务
systemctl restart httpd
5.开始部署安装配置 discuz论坛项目
chmod -R 777 /var/www/html/discuz 设置权限
在浏览器输入http://192.168.10.110/discuz/install/
选择全新安装,点击下一步,
输入数据库ip地址:192.168.10.110,数据库的名称:bbs,数据库用户名:runbbs,管理员的密码:123456
http://192.168.10.110/discuz/admin.php 登录管理员
管理员页面:http://192.168.10.110/discuz/admin.php? 输入admin的密码,登录
去修改install目录 更改名字 使客户不能查看
cd /var/www/html/discuz/
21.在 LANP10.110中新建index.php作为动态网页
1.更改nginx的配置文件 改为新LANP的ip
在nginx服务器主配置文件修改
vim /etc/nginx/nginx.conf
nginx -s reload 刷新源码重启
http://192.168.10.10/discuz/forum.php
访问的是 LANP10.110上的网页
在10.110LANP上创建测试页php
cd /var/www/html/
vim index.php
<?php
$link=mysqli_connect('192.168.10.110','root','123456');
if($link)
echo "ok 11";
else
echo "not ok 11";
?>
在10.10上访问