静态网站  在不同环境下,网站内容不会变化

动态网站  在不同环境下,网站内容有可能发生变化

LNMP 环境

L  linux    操作系统

N  nginx    网站服务   

M  mariadb(mysql)   数据库

P   php   编写动态网站的语言工具



准备nginx以及相关软件包

killall nginx  //停止nginx程序

rm -rf  /usr/local/nginx    //删除nginx原有目录

cd  /root/lnmp_soft/nginx-1.17.6

./configure  --with-http_ssl_module    //配置

make   //编译

make install   //安装


yum -y install  mariadb  mariadb-server

与服务端

systemctl start mariadb 

yum -y install  mariadb-devel 

yum -y install  php

yum -y install  php-fpm

--------关联nginx和PHP


yum -y install  php-mysql 

systemctl start  php-fpm   //开启php-fpm服务

yum -y install net-tools

netstat  -ntulp  | grep  mysql   //检查数据库

netstat  -ntulp  | grep  php-fpm   //检查php-fpm服务

用户 – 浏览器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;  //这里是另外一个配置文件,需要改扩展名
        }

nginx动态拼接域名 nginx可以做动态网站吗?_html

 先查看一下文件中写的内容:

nginx动态拼接域名 nginx可以做动态网站吗?_html_02

 

 关闭防火墙,使用火狐浏览器访问 192.168.2.5/test.php

nginx动态拼接域名 nginx可以做动态网站吗?_nginx_03

 整理:

1.拷贝测试文件     cp  ~/lnmp_soft/php_scripts/test.php  /usr/local/nginx/html

2.启动服务     sbin/nginx

3.修改配置文件    vim conf/nginx.conf 

4.浏览器测试       

 

fastCGI    快速公共网关接口,可以连接如nginx等网站程序到网站的语言解释器(比如php)

sbin/nginx    //开启nginx,如果已经开启就使用sbin/nginx -s reload 

如果均不能正常开启,就用killall nginx然后重新试

使用火狐访问http://192.168.2.5/test.php  可以看到页面内容

测试有数据库的动态网站

cp  ~/lnmp_soft/php_scripts/mysql.php  /usr/local/nginx/html/   //拷贝另外一个测试页面到nginx

浏览器打开http://192.168.2.5/mysql.php   可以看到网站显示了数据的账户信息

nginx动态拼接域名 nginx可以做动态网站吗?_nginx_04

 

 

mysql   //进入数据库
create user dc@localhost identified by '123';   //创建测试账户
quit  //退出

刷新http://192.168.2.5/mysql.php  可以看到新创建的用户

看到以上test.php、mysql.php两个页面说明nginx不但能识别静态网站,也能解析动态

网站了,这种情况也可以记作nginx实现了动静分离

nginx动态拼接域名 nginx可以做动态网站吗?_nginx动态拼接域名_05

 

地址重写

可以定义用户的访问路径可以看到的实际内容

rewrite  匹配路径   实际看到的页面    选项


地址重写测试1:相同网站不同页面

cp conf/nginx.conf.default conf/nginx.conf    //可以先还原配置文件

cp:是否覆盖"conf/nginx.conf"? y

打开配置文件,在38行添加

rewrite  /a.html  /b.html;    //用户访问的路径中包含a.html的话

就跳转到b.html页面

 

然后准备测试页面
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的内容

nginx动态拼接域名 nginx可以做动态网站吗?_运维_06

 

nginx动态拼接域名 nginx可以做动态网站吗?_html_07

 

相同网站不同页面
rewrite ^/a.html$ /b.html redirect;   //在刚刚的配置中添加redirect
sbin/nginx -s reload
使用http://192.168.2.5/a.html路径访问网站时,地址栏同时发生变化

nginx动态拼接域名 nginx可以做动态网站吗?_nginx动态拼接域名_08

 

不同网站间跳转
rewrite / http://www.baidu.com;    //访问192.168.2.5的网站可以
跳转到www.tmooc.cn
sbin/nginx -s reload

* 每次写完配置文件都要重新加载

 sbin/nginx -s reload

nginx动态拼接域名 nginx可以做动态网站吗?_php_09

 

不同网站间跳转
rewrite /(.*) http://www.baidu.com/$1;    //访问老网站会跳到新网站,同时会携带所访问的页面
sbin/nginx -s reload

 

nginx动态拼接域名 nginx可以做动态网站吗?_php_10

 

()是正则代表复制

$1 代表粘贴

访问点是自己想访问的网站,复制啥访问啥

 比如这里,我们要访问的是tb,但是地址栏里还是原来的地址,实际访问的是tb。

nginx动态拼接域名 nginx可以做动态网站吗?_html_11

 

不同浏览器跳转到不同页面

火狐专用页面   192.168.2.5/abc.html     html/firefox/abc.html

其他专用页面    192.168.2.5/abc.html     html/abc.html

修改配置文件,删除原有地址重写,原地添加

if  ($http_user_agent  ~*  firefox){

rewrite  /(.*)  /firefox/$1; 

}         

//$http_user_agent是nginx的内置变量,存储了用户的信息,比如用的什么浏览器

~匹配正则  *忽略大小写

改完后sbin/nginx  -s  reload 

使用火狐浏览器查看192.168.2.5/abc.html可以看到之前html/firefox目录下的页

面,非火狐浏览器打开192.168.2.5/abc.html看到的是html下的页面

 测试:

火狐浏览器

nginx动态拼接域名 nginx可以做动态网站吗?_nginx动态拼接域名_12

 系统自带浏览器:

nginx动态拼接域名 nginx可以做动态网站吗?_php_13

 

选项

redirect    临时重定向   状态码  302   爬虫不感兴趣

permanent  永久重定向  状态码  301   爬虫感兴趣

以下两种写法对于用户来说效果一样,但是对百度这样的网站不同
rewrite  ^/a.html$  /b.html  permanent;
rewrite  ^/a.html$  /b.html  redirect;

nginx动态拼接域名 nginx可以做动态网站吗?_php_14

 

nginx动态拼接域名 nginx可以做动态网站吗?_运维_15

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 ;

 

nginx动态拼接域名 nginx可以做动态网站吗?_nginx_16

测试浏览器,访问到的是c.html      a>b>c

  

nginx动态拼接域名 nginx可以做动态网站吗?_运维_17

 改为last:

nginx动态拼接域名 nginx可以做动态网站吗?_nginx动态拼接域名_18

 测试:

nginx动态拼接域名 nginx可以做动态网站吗?_php_19

 

 

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;
}

nginx动态拼接域名 nginx可以做动态网站吗?_运维_20

 测试:

访问a显示b.html 

不在执行c.html

nginx动态拼接域名 nginx可以做动态网站吗?_运维_21