静态网站 在不同环境下,网站内容不会变化
动态网站 在不同环境下,网站内容有可能发生变化
用户 – 浏览器html语言 ------------------- 服务器 html页面
php 页面 --- php-fpm
准备动态网站页面的测试文件
cp ~/lnmp_soft/php_scripts/test.php /usr/local/nginx/html //拷贝动态网站测试页面到nginx中
cd /usr/local/nginx
sbin/nginx //启动nginx服务
打开nginx配置文件,第65到71行去掉注释(可以用:65,71s/#//),69行不用去
location ~ \.php$ { //~是使用正则表达式,匹配以.php结尾
root html; //网站页面位置,不用改,保持默认
fastcgi_pass 127.0.0.1:9000; //一旦用户访问了.php结尾的文
件,就让nginx找后台的php-fpm(端口号9000)
fastcgi_index index.php; //动态网站的默认页面,无需修改
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
//无用行,保持注释状态
include fastcgi.conf; //这里是另外一个配置文件,需要改扩展名
}
先查看一下文件中写的内容:
关闭防火墙,使用火狐浏览器访问 192.168.2.5/test.php
fastCGI 快速公共网关接口,可以连接如nginx等网站程序到网站的语言解释器(比如php)
测试有数据库的动态网站
cp ~/lnmp_soft/php_scripts/mysql.php /usr/local/nginx/html/ //拷贝另外一个测试页面到nginx
浏览器打开http://192.168.2.5/mysql.php 可以看到网站显示了数据的账户信息
mysql //进入数据库
create user dc@localhost identified by '123'; //创建测试账户
quit //退出
刷新http://192.168.2.5/mysql.php 可以看到新创建的用户
看到以上test.php、mysql.php两个页面说明nginx不但能识别静态网站,也能解析动态
网站了,这种情况也可以记作nginx实现了动静分离
然后准备测试页面
echo "nginx-a~~" > html/a.html
echo "nginx-b~~" > html/b.html
[root@proxy nginx]# sbin/nginx -s reload
使用浏览器访问192.168.2.5/a.html看到的是b.html的内容
相同网站不同页面
rewrite ^/a.html$ /b.html redirect; //在刚刚的配置中添加redirect
sbin/nginx -s reload
使用http://192.168.2.5/a.html路径访问网站时,地址栏同时发生变化
不同网站间跳转
rewrite / http://www.baidu.com; //访问192.168.2.5的网站可以
跳转到www.tmooc.cn
sbin/nginx -s reload
* 每次写完配置文件都要重新加载
sbin/nginx -s reload
不同网站间跳转
rewrite /(.*) http://www.baidu.com/$1; //访问老网站会跳到新网站,同时会携带所访问的页面
sbin/nginx -s reload
修改配置文件,删除原有地址重写,原地添加
if ($http_user_agent ~* firefox){ //如果用户使用了火狐浏览器
rewrite /(.*) /firefox/$1; //就进行地址重写操作,让用户看到火狐专属页面
}
测试:
火狐浏览器
系统自带浏览器:
选项
redirect 临时重定向 状态码 302 爬虫不感兴趣
permanent 永久重定向 状态码 301 爬虫感兴趣
以下两种写法对于用户来说效果一样,但是对百度这样的网站不同
rewrite ^/a.html$ /b.html permanent;
rewrite ^/a.html$ /b.html redirect;
last 不再读其他rewrite
echo "nginx-c~~" > html/c.html //准备素材c页面
rewrite /a.html /b.html last; //不加last的话nginx会把多个rewrite语句综合处理
结果就是看a页面结果跳到c页面了,加了last的话可以避免这个情况
rewrite /b.html /c.html ;
测试浏览器,访问到的是c.html a>b>c
改为last:
测试:
break 不再读其他语句
location / { //此处为默认的location
rewrite /a.html /b.html break; //将last改为break可以阻止后面的语句,此处如果是last则无法阻止后面location语句中的rewrite语句
root html;
index index.html index.htm;
}
location /b.html { //这里是新添加的location
rewrite /b.html /c.html;
}
测试:
访问a显示b.html
不在执行c.html