location 作用: 可以有多个 会匹配地址栏里的扩展地址进行匹配 支持正则: ~ .php$ 代表正则匹配 模糊匹配 以.php结尾的地址

格式 rewrite 旧地址 新地址 选项 rewrite regex replacement flag

选项flag可以是如下参数 last 停止执行其他重写规则,根据url继续搜索其他location,地址栏不改变

break
停止执行其他重写规则,完成本次请求

redirect
302临时重定向地,址栏改变,爬虫不更新url

permanent
301永久重定向,地址栏改变,爬虫更新url

rewrite a b last;防止来回跳转
rewrite b a;

正则表达式 区分大小写匹配 ~ 不区分大小写匹配 ~* 区分大小写不匹配 !~ 不区分大小写不匹配 !~*

判断文件是否存在 -f
判断目录是否存在 -d
判断文件是否可执行 -x
判断文件目录连接是否存在 -e

域名跳转 #server里location外 server_name www.360buy.com; rewrite ^/(.*) http://www.jd.com/$1;
location / {

也面跳转 #location里 location / { if ( $http_user_agent ~* firefox ) { rewrite ^(.*)$ /test$1 break; }


LNMP 动态网站 L linux N Nginx M mysql mariadb P 网站开发语言 PHP Perl Python...

安装的软件列表如下: nginx mariadb、mariadb-server、mariadb-devel php、php-fpm、php-mysql

#yum -y install mariadb mariadb-server #yum -y install mariadb-devel #yum -y install php php-mysql #rpm -ivh php-fpm-5.4.16-36.el7_1.x86_64.rpm 服务端口9000

起服务 #nginx #端口80 #systemctl start php-fpm #端口9000 #systemctl start mariadb #端口3306

开机启动目录 /usr/lib/systemd/system/

nginx 相关配置 源文件里有模版 需要修改 #vim /usr/local/nginx/conf/nginx.conf ...... 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; #包含的子配置文件 } ......

location 作用: 可以有多个 会匹配地址栏里的扩展地址进行匹配 支持正则: ~ .php$ 代表正则匹配 模糊匹配 以.php结尾的地址


模版 wordpress PHP 织梦 PHP 帝国 PHP php-fpm配置文件 #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

创建PHP测试页面1: #vim /usr/local/nginx/html/test1.php <?php $i="This is a test Page"; echo $i; ?>

创建PHP测试页面2,连接MariaDB数据库: #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!!!"; } ?>

创建PHP测试页面3,连接并查询MariaDB数据库: #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>"); } ?>

测试 #firefox http://192.168.4.5/test1.php #firefox http://192.168.4.5/test2.php #firefox http://192.168.4.5/test3.php


地址重写:

格式 rewrite 旧地址 新地址 选项 rewrite regex replacement flag

选项flag可以是如下参数 last 停止执行其他重写规则,根据url继续搜索其他location,地址栏不改变

break
停止执行其他重写规则,完成本次请求

redirect
302临时重定向地,址栏改变,爬虫不更新url

permanent
301永久重定向,地址栏改变,爬虫更新url

rewrite a b last;
rewrite b a;

页面的跳转 注意位置 在location里面 #vim /usr/local/nginx/conf/nginx.conf .. .. server { listen 80; server_name localhost; location / { root html; index index.html index.htm; rewrite /a.html /b.html redirect;
} }

#redirect 客户端显示跳转
是支持正则的 a.html的.(点)也算任意单个字符
a.html文件不需要存在

域名的跳转

访问www.360buy.com跳转到www.jd.com 注意位置 server里面location外面 #vim /usr/local/nginx/conf/nginx.conf .. .. server { listen 80; server_name www.360buy.com; rewrite ^/(.*) http://www.jd.com/$1;
location / { root html; index index.html index.htm;

}
}

访问www.nidama.com跳转到www.nidaye.com

#vim /usr/local/nginx/conf/nginx.conf server { listen 80; server_name www.nidama.com;

    rewrite ^/(.*) http://www.nidaye.com/$1;
    location / {
        root   html;
        index  index.html index.htm;
    }
}
server {
    listen       80;
    server_name  www.nidaye.com;
    location / {
        root   html;
        index  index.html index.htm;
    }
}

注 rewrite ^/(.) http://www.jd.com/$1; (.)代表保留扩展域名后面的$1就代表前面的扩展域名 实现只跳转 域名 不影响子网页

charset utf-8; #万国解码 支持中文显示

正则表达式 区分大小写匹配 ~ 不区分大小写匹配 ~* 区分大小写不匹配 !~ 不区分大小写不匹配 !~*

判断文件是否存在 -f
判断目录是否存在 -d
判断文件是否可执行 -x
判断文件目录连接是否存在 -e

server {
   listen  80;
   server_name www.test.com;

location / {
        root   html;
        index  index.html;
	}
if ($http_user_agent ~* curl){
        rewrite ^(.*)$ /test$1;
	}
}

根 是当匹配不到后默认匹配的路径 根的优先级最低 location / { root html; index index.htm;

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

实验总结:

对IP先做域名跳转 后做页面跳转 之后再皮匹配阅览器访问不同样式的页面。

IP-->www.test.com-->将访问a.html(不存在)跳转至b.html-->firefox 阅览器第一版版 ,其他阅览器第一版

#ls index.html test01 test02 test01]# ls #二版页面 b.html inde.html test02]# ls #一版页面 b.html inde.html

#vim /usr/local/nginx/conf/nginx.conf ... server { listen 80; server_name localhost;

    rewrite ^/(.*) http://www.test.com/$1 break;

    location / {
        root   html;
        index  index.html index.htm;
    }

... server { listen 80; server_name www.test.com;

location / {
    root    html;
    index   inde.html;

if ( $request_uri = "/" ) {      #扩展页面啥也不输入会跳转一个页面
    rewrite / /index.html break;
	}

    rewrite /a.html /b.htmlredirect;	#将扩展名a改b访问

if ( $http_user_agent ~* firefox ) {	#客户端为火狐跳到一版页面
    rewrite ^/(.*) /test01/$1 break;
	}
if ( $http_user_agent ~* curl ) {	#客户端为curl跳到二版页面
    rewrite ^/(.*) /test02/$1 break;
	}
}
}

nginx内置变量:

//该段为自定义log输出样式函数。配合下面的access_log使用  
//日志格式设置:  
//$remote_addr与$http_x_forwarded_for用以记录客户端的ip地址;  
//$remote_user:用来记录客户端用户名称;  
//$time_local: 用来记录访问时间与时区;  
//$request: 用来记录请求的url与http协议;  
//$status: 用来记录请求状态;成功是200,  
//$body_bytes_sent :记录发送给客户端文件主体内容大小;  
//$http_referer:用来记录从那个页面链接访问过来的;  
//$http_user_agent:记录客户浏览器的相关信息  

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