工具—远程桌面查看器--VNC 172.40.50.118:8php
51CTO博客、百度html
nginx的statusjava
###################################################mysql
opration linux高级运维linux
day 03nginx
LVS[没有健康检查的功能]web
while :正则表达式
dosql
ping 192.168.2.100shell
if [ $? -ne 0 ];then
sed -i ‘/2.100/ s/(.*)/#\1/’ nginx.conf
sleep 1
done
who
pgrep -t nginx
kill -9 24158
pstree -ap | grep nginx
killall -9 nginx
配置 rsync 自动将虚拟机 3 上的页面自动同步到虚拟机 4,确保两台主机的页面一致:
#####################################
动态网站
Nginx[静态,动态]
页面是html,mp3,mp4,txt,doc,pdf
动态脚本语言:shell,PHP简单、专门针对网站、只能作网站、java(jsp)、Python豆瓣网
LNMP== ( Linux操做系统(底层) + Nginx网站服务软件(web) +
MariaDB、mysql数据库 + PHP|Python|Perl网站开发语言 )
在192.168.4.5
软件包列表:LNMP
实验1:部署LNMP环境
nginx[web服务,接收用户的请求] 源码包
gcc、openssl-devel、pcre-devel、zlib-devel
php [解释器]
yum -y localinstall php-fpm-5.4.16<tab> [服务、监听9000端口] rpm包
mariadb [数据库客户端]
mariadb-server [数据库服务器]
mariadb-devel [依赖包]
php-mysql [php链接mysql的扩展库文件]
vim 1.php
<?php /开头
$i = 33; /变量都有个$
$j = 44;
if ($i > $j ){
echo “i is bigger”;
}
else{
echo “ j is bigger”;
}
echo $i; /echo 默认不换行
echo “hi”; /每行以分号结尾
?> /结尾
#php 1.php
启动全部服务:
nginx 启动[80]
systemctl start php-fpm 启动[9000]
systemctl start mariadb 启动[3306]
netstat -antpu |grep 80 | 9000 |3306
##########################################
实验2:Nginx动静分离 (Nginx + FastCGI)
nginx[静态]
root html
nginx[动态]
nginx转发给PHP:9000
判断,若是用户访问的是静态页面,则找到,直接返回
若是用户访问的是动态页面,则转发给9000
location匹配用户的地址栏,至关于一个if。支持正则表达式【~+正则】
# vim /usr/local/nginx/conf/nginx.conf
……
location ~ \.php${ /不论目录
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi.conf;
}
vim /usr/local/nginx/html/test.php
<?php
phpinfo();
?>
# nginx -s reload
# curl http://192.168.4.6/test.php
常见问题:
1.出现下载页面 【配置文件中没有php转发】
nginx没有作动静分离的location和对应的fastcgi_pass
2.出现空白页面----检查php页面文件的语法格式
a) tailf nginx/logs/error.log 没有错误
b) tailf /var/logphp-fpm/www-error.log
有错误提示!
3.File not found. 【转发设置不正确】防火墙[SELinux]
4.An error occurred(看日志error.log Connection refused)【转发给9000后,无响应,php未启动】
检查php-fpm是否启动成功,ip是否正确
##########################################
fastcgi是一种常驻型(long-live)的CGI
将CGI解释器进程保持在内存中,进行维护与调度。目前支持语言有PHP、C/C++、Java、Perl、Python、Ruby等
fastcgi缺点
内存消耗大,应为是多进程
php配置文件(很耗内存)/etc/php-fpm.d/www.conf
# grep -v "^;" /etc/php-fpm.d/www.conf | grep -v "^$" /etc/php-
# ps aux | grep fpm
最少5个进程,最多50个php进程
每一个进程最少7-25兆内存
mairadb性能更好的execl65536
cp /opt/lnmp_soft/php_scripts/mysql.php /usr/local/nginx/html/
LNMP 1.nginx接受用户的请求
2.判断请求的是静态仍是动态的页面 location
若是请求是静态页面,则nginx找到该页面直接给用户
若是请求的是php页面,则找到该页面,交给9000执行
执行到中间的某一行,可能须要链接数据库
new mysqli('localhost','root','','mysql')
手机上的数据库sqllite
##########################################
地址重写
rewrite 正则 跳转后的URL [选项];
案例1:访问a.html跳转到b.html
vim /usr/local/nginx/conf/nginx.conf
... ...
server {
listen 80;
server_name localhost;
location / {
root html;
rewrite /a.html /b.html redirect;
}
#echo "BB" > /usr/local/nginx/html/b.html
#nginx -s reload
#curl http://192.168.4.6/a.html
案例2:访问192.168.4.5跳转到www.tmooc.cn
#curl http://192.168.4.6/a.html
vim /usr/local/nginx/conf/nginx.conf
... ...
server {
listen 80
server_name localhost;
location / {
root html;
rewrite ^/ http://www.tmooc.cn;
}
附加:
访问旧的网站页面,跳转到新的网站相同页面
rewrite ^/(.*) http://www.jd.com/$1;
保留和粘贴
案例3:不一样浏览器访问相同页面返回结果不一样
IE (msie) http://192.168.4.5/test.html
firefox http://192.168.4.5/test.html
UC http://192.168.4.5/test.html
nginx【内置变量】
vim /usr/local/nginx/conf/nginx.conf
server {
... ...
if ($http_user_agent ~* curl){ /*表示包含curl,不区分大小写
rewrite ^/(.*) /curl/$1;
}
#cd /usr/local/nginx/html
#echo "1" >test.html
#mkdir curl
#echo "2" >curl/test.html
#nginx -s reload
firefox http://192.168.4.5/test.html
curl http://192.168.4.5/test.html
案例4:若是用户访问的页面不存则转到首页
vim /usr/local/nginx/conf/nginx.conf
server {
... ...
if (!-e $request_filename){
rewrite ^/ http://192.168.4.5;
}
#nginx -s reload
rewrite 正则 URL [选项]
rewrite 选项:
last 中止执行其余rewrite
break 中止执行其余rewrite,并结束请求
redirect 临时重定向
permament 永久重定向
安装部署Nginx、MariaDB、PHP环境
安装部署Nginx、MariaDB、PHP、PHP-FPM;
启动Nginx、MariaDB、FPM服务;
并测试LNMP是否工做正常。
在RHEL7系统中,源码安装Nginx,使用RPM包安装MariaDB、PHP、PHP-FPM软件。
操做过程当中须要安装的软件列表以下:
nginx
mariadb、mariadb-server、mariadb-devel
php、php-fpm、php-mysql
实现此案例须要按照以下步骤进行。
步骤一:安装软件
1)使用yum安装基础依赖包
[root@svr5 ~]# yum -y groupinstall "Development tools" "Additional Development"
[root@svr5 ~]# yum -y install gcc openssl-devel pcre-devel zlib-devel
.. ..
2)源码安装Nginx
[root@svr5 ~]# useradd –s /sbin/nologin nginx
[root@svr5 ~]# tar -zxvf nginx-1.8.0.tar.gz
[root@svr5 ~]# cd nginx-1.8.0
[root@svr5 nginx-1.8.0]# ./configure \
> --prefix=/usr/local/nginx \
> --user=nginx --group=nginx \
> --with-http_ssl_module
[root@svr5 ~]# make && make install
.. ..
3)安装MariaDB
Mariadb在新版RHEL7光盘中包含有该软件,配置yum源后能够直接使用yum安装:
[root@svr5 ~]# yum –y install mariadb mariadb-server mariadb-devel
4)php和php-fpm
[root@svr5 ~]# yum –y install php
[root@svr5 ~]# tar –xf lnmp_soft-2017-03-28.tar.gz
[root@svr5 ~]# cd lnmp_soft
[root@svr5 ~]# yum –y localinstall php-fpm-5.4.16-36.el7_1.x86_64.rpm
[root@svr5 ~]# yum –y install php-mysql
步骤二:启动服务
1)启动Nginx服务
这里须要注意的是,若是服务器上已经启动了其余监听80端口的服务软件(如httpd),则须要先关闭该服务,不然会出现冲突。
[root@svr5 ~]# service httpd stop //若是该服务存在则关闭该服务
[root@svr5 ~]# chkconfig httpd off
[root@svr5 ~]# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
[root@svr5 ~]# netstat -utnlp | grep :80
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 32428/nginx
2)启动MySQL服务
[root@svr5 ~]# systemctl start mariadb
[root@svr5 ~]# systemctl status mariadb
[root@svr5 ~]# systemctl enable mariadb
3)启动PHP-FPM服务
[root@svr5 ~]# systemctl start php-fpm
[root@svr5 ~]# systemctl status php-fpm
[root@svr5 ~]# systemctl enable php-fpm
沿用练习一,经过调整Nginx服务端配置,实现如下目标:
配置Fast-CGI支持PHP网页
建立PHP测试页面,测试使用PHP链接数据库的效果
使用2台RHEL7虚拟机,其中一台做为LNMP服务器(192.168.4.5)、另一台做为测试用的Linux客户机(192.168.4.100),如图-1所示。
图-1
Nginx结合FastCGI技术便可支持PHP页面架构,所以本案例,须要延续练习一的实验内容,经过修改Nginx及php-fpm配置文件实现对PHP页面的支持。
php-fpm须要修改的常见配置以下:
listen = 127.0.0.1:9000
pm.max_children = 32
pm.start_servers = 15
pm.min_spare_servers = 5
pm.max_spare_servers = 32
实现此案例须要按照以下步骤进行。
步骤一:建立并修改php-fpm配置文件
1)查看php-fpm配置文件
[root@svr5 etc]# vim /etc/php-fpm.d/www.conf
[www]
listen = 127.0.0.1:9000
listen.allowed_clients = 127.0.0.1
user = apache
group = apache
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
2)确认php-fpm服务已经启动
[root@svr5 ~]# systemctl restart php-fpm
[root@svr5 ~]# systemctl status php-fpm
步骤二:修改Nginx配置文件并启动服务
[root@svr5 ~]# vim /usr/local/nginx/conf/nginx.conf
location / {
root html;
index index.php index.html index.htm;
}
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
#fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi.conf;
}
[root@svr5 ~]# /usr/local/nginx/sbin/nginx -s reload
步骤三:建立PHP页面,测试LNMP架构可否解析PHP页面
1)建立PHP测试页面1:
[root@svr5 ~]# vim /usr/local/nginx/html/test1.php
<?php
phpinfo();
?>
2)建立PHP测试页面,链接MariaDB数据库:
[root@svr5 ~]# vim /usr/local/nginx/html/test2.php
<?php
$links=mysql_connect("localhost","root","密码");
//注意:root为mysql帐户名称,密码须要修改成实际mysql密码,无密码则留空便可
if($links){
echo "link db ok!!!";
}
else{
echo "link db no!!!";
}
?>
3)建立PHP测试页面,链接并查询MariaDB数据库:
[root@svr5 ~]# vim /usr/local/nginx/html/test3.php
<?php
$mysqli = new mysqli('localhost','root','','mysql');
if (mysqli_connect_errno()){
die('Unable to connect!'). mysqli_connect_error();
}
$sql = "select * from user";
$result = $mysqli->query($sql);
while($row = $result->fetch_array()){
printf("Host:%s",$row[0]);
printf("</br>");
printf("Name:%s",$row[1]);
printf("</br>");
}
?>
4)客户端使用浏览器访问服务器PHP首页文档,检验是否成功:
[root@client ~]# firefox http://192.168.4.5/test1.php
[root@client ~]# firefox http://192.168.4.5/test2.php
[root@client ~]# firefox http://192.168.4.5/test3.php
沿用练习一,经过调整Nginx服务端配置,实现如下目标:
全部访问/image目录下资源的请求,重定向至/picture目录;
全部访问www.tarena.com的访问重定向至bbs.tarena.com;
实现curl访问不一样的页面。
关于Nginx服务器的地址重写,主要用到的配置参数是rewrite:
rewrite regex replacement flag
实现此案例须要按照以下步骤进行。
步骤一:修改配置文件
1)修改Nginx服务配置:
[root@svr5 ~]# vim /usr/local/nginx/conf/nginx.conf
.. ..
server {
listen 80;
server_name www.tarena.com;
location / {
root html;
index index.html index.htm;
rewrite ^/ http://bbs.tarena.com/;
//地址重写,访问www.tarena.com将被重定向至bbs.tarena.com
rewrite ^/image/(.*)$ /picture/$1 break;
//全部访问/image目录下资源的请求,重定向至/picture目录
if ($http_user_agent ~* url) { //识别客户端curl浏览器
rewrite ^(.*)$ /curl/$1 break;
}
}
}
2)从新加载配置文件
[root@svr5 ~]# /usr/local/nginx/sbin/nginx -s reload
3)建立网页目录以及对应的页面文件:
[root@svr5 ~]# mkdir -p /usr/local/nginx/html/curl/picture
[root@svr5 ~]# echo "I am is curl page" > /usr/local/nginx/html/curl/test.html
[root@svr5 ~]# cp /usr/share/backgrounds/gnome/Road.jpg \
> /usr/local/nginx/curl/picture/test.jpg
步骤二:客户端测试
客户端使用浏览器测试各个页面的访问是否被重定向。
[root@svr5 ~]# curl http://192.168.4.5/test.html
[root@svr5 ~]# firefox http://192.168.4.5/test.html
[root@svr5 ~]# firefox http://192.168.4.5/images/test.jpg