首页 > 技术文章 > linux及nginx日志和if语句,防盗链 网页优化,压缩 LANP架构 动静分离 (二)

kk5698 2020-08-01 20:02 原文

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;

}

 

 

测试防盗效果。

http://192.168.10.11/ 

 

 

 

 

 

 

 

 

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     本机

 

FLUSH PRIVILEGES;      刷新权限

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();

?>

 

在浏览器验证

http://192.168.10.110/ 

 

 

 

 

 

 

 

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   

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上访问

 

 

推荐阅读