linux,一、部署LNMP环境二、配置动静分离三、地址重写四、编写systemd Unit文件

一、部署LNMP环境
二、配置动静分离
三、地址重写
四、编写systemd Unit文件

一、部署LNMP环境
环境说明
主机名	IP地址	角色
server1(已存在)	eth0:192.168.88.254/24	客户端
proxy(已存在)	eth0:192.168.88.5/24	web服务器
动态网站说明
安装部署LNMP环境实现动态网站解析
静态网站 在不同环境下访问,网站内容不会变化
动态网站 在不同环境下访问,网站内容有可能发生变化

目前的网站一般都会有动态和静态数据,默认nginx仅可以处理静态数据,用户访问任何数据都是直接返回对应的文件,如果如果访问的是一个脚本的话,就会导致直接返回一个脚本给用户,而用户没有脚本解释器,也看不懂脚本源代码

因此需要整合LNMP(Linux、Nginx、MySQL、PHP)实现动态网站效果
1)安装软件
为了不受到之前实验的影响,可以先删除nginx,重安装
[root@proxy ~]# /usr/local/nginx/sbin/nginx -s stop  #如果nginx没有停止,执行命令停止,如果已经停止,无需执行
[root@proxy ~]# rm -rf /usr/local/nginx/    #删除nginx原有目录
[root@proxy ~]# cd /root/lnmp_soft/nginx-1.22.1/
[root@proxy nginx-1.22.1]# yum -y install gcc make openssl-devel pcre-devel
[root@proxy nginx-1.22.1]# ./configure --with-http_ssl_module
[root@proxy nginx-1.22.1]# make && make install  #编译安装
2)安装MariaDB,php和php-fpm
[root@proxy nginx-1.22.1]# yum -y install mariadb  mariadb-server mariadb-devel php php-mysqlnd php-fpm

mariadb(数据库客户端软件)、mariadb-server(数据库服务器软件)、mariadb-devel(依赖包)、php(识别php语言)、php-fpm(进程管理器服务)、php-mysqlnd(PHP的数据库扩展包)
3)启动服务
1)启动Nginx服务
[root@proxy nginx-1.22.1]# /usr/local/nginx/sbin/nginx
[root@proxy nginx-1.22.1]# ss -antlp | grep 80
tcp   LISTEN 0      128          0.0.0.0:80        0.0.0.0:*    users:(("nginx",pid=15507,fd=6),("nginx",pid=15506,fd=6))

2)启动MySQL服务
[root@proxy nginx-1.22.1]# systemctl enable --now mariadb  #加入开机自启并立即启动
[root@proxy nginx-1.22.1]# systemctl status mariadb  #查看服务状态

3)启动PHP-FPM服务
[root@proxy nginx-1.22.1]# systemctl enable --now php-fpm  #加入开机自启并立即启动
[root@proxy nginx-1.22.1]# systemctl status php-fpm          #查看服务状态

4)使用PHP测试页面
[root@proxy nginx-1.22.1]# cp /root/lnmp_soft/php_scripts/test.php /usr/local/nginx/html/   #拷贝动态网站测试页面到nginx中
使用浏览器访问192.168.88.5/test.php 则无法看到页面内容,而是会当成要下载的文件,因为无法解析php动态页面
二、配置动静分离
配置动静分离
通过调整Nginx服务端配置,实现以下目标:
配置Fast-CGI支持PHP网页解析
Fast-CGI是快速公共(通用)网关接口,可以连接如nginx等网站程序到网站的语言解释器(比如php) ,php-fpm进程使用了Fast-CGI解析动态网站页面
1)修改Nginx配置文件并启动服务
[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
...
 65         location ~ \.php$ {     #~是使用正则表达式匹配以.php结尾,\ 转义
 66             root           html;
 67             fastcgi_pass   127.0.0.1:9000;  #将请求转发给本机php-fpm的9000端口
 68             fastcgi_index  index.php;       #网站默认页
 69             include        fastcgi.conf;    #加载fastcgi配置文件
 70         } 
2)修改 php-fpm配置文件
打开php-fpm配置文件,注意该配置文件中;(分号)是注释
[root@proxy nginx-1.22.1]# vim /etc/php-fpm.d/www.conf
 38 listen = 127.0.0.1:9000     #更改php-fpm端口号(使用网络通信)
[root@proxy nginx-1.22.1]# systemctl restart php-fpm    #重启服务
[root@proxy nginx-1.22.1]# ss -antlp | grep 9000        #查看监听端口
LISTEN 0      128        127.0.0.1:9000      0.0.0.0:*    users:(("php-fpm",pid=15808,fd=8),("php-fpm",pid=15807,fd=8),("php-fpm",pid=15806,fd=8),("php-fpm",pid=15805,fd=8),("php-fpm",pid=15804,fd=8),("php-fpm",pid=15803,fd=6))


了解:
[root@proxy nginx-1.22.1]# vim /etc/php-fpm.d/www.conf
115 pm.max_children = 50        #最大进程数量
120 pm.start_servers = 5        #最小进程数量
3)测试能否解析PHP页面
1)启动或者重加载nginx
[root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload
再次使用浏览器访问192.168.88.5/test.php 可以看到页面内容

2)再测试连接数据库的PHP页面
可以参考lnmp_soft/php_scripts/mysql.php
[root@proxy nginx-1.22.1]# cp  /root/lnmp_soft/php_scripts/mysql.php  /usr/local/nginx/html    #拷贝动态网站测试页面到nginx中

3)客户端使用浏览器访问服务器PHP首页文档,检验是否成功
http://192.168.88.5/mysql.php       #访问成功

然后修改数据库内容进行测试
[root@proxy nginx-1.22.1]# mysql   #进入数据库
MariaDB [(none)]> create user dc@localhost identified by '123';   #创建测试账户
MariaDB [(none)]> exit  #退出
浏览器访问192.168.88.5/mysql.php 可以看到新创建的用户
使用socket方式连接php-fpm
1)更改php-fpm配置文件
1)打开php-fpm配置文件
[root@proxy nginx-1.22.1]# vim /etc/php-fpm.d/www.conf
 38 listen = /run/php-fpm/www.sock                #socket方式(使用进程通信)
 55 listen.acl_users = apache,nginx,nobody        #添加nobody账户
[root@proxy nginx-1.22.1]# systemctl restart php-fpm    #重启服务

修改Nginx配置文件并启动服务
[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
...
 65         location ~ \.php$ {     #匹配以.php结尾
 66             root           html;
 67             fastcgi_pass   unix:/run/php-fpm/www.sock;  #将请求转发给php-fpm进程
 68             fastcgi_index  index.php;
 69             include        fastcgi.conf;        #加载fastcgi配置文件
 70         }
[root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload
使用浏览器访问192.168.88.5/test.php 可以看到页面内容
三、地址重写
地址重写语法
关于Nginx服务器的地址重写,主要用到的配置参数是rewrite

语法格式:
rewrite regex replacement flag
rewrite 旧地址   新地址    [选项]
1)修改配置文件(访问a.html重定向到b.html)
1)修改Nginx服务配置
[root@proxy nginx-1.22.1]# cd /usr/local/nginx/
[root@proxy nginx]# cp conf/nginx.conf.default conf/nginx.conf  #还原配置文件
cp: overwrite 'conf/nginx.conf'? y
[root@proxy nginx]# vim /usr/local/nginx/conf/nginx.conf
.. ..
server {
        listen       80;
        server_name  localhost;
        rewrite  /a.html  /b.html;       #新添加地址重写,a.html重定向到b.html  
        ...
    location / {
        root   html;
        index  index.html index.htm;
    }
}
[root@proxy nginx]# echo "nginx-B~~" > /usr/local/nginx/html/b.html

2)重新加载配置文件
[root@proxy nginx]# /usr/local/nginx/sbin/nginx  -s  reload

3)客户端测试
http://192.168.88.5/a.html          #内容显示的是nginx-B~~,但是地址栏没有发生变化,还是a.html页面

此时配置文件中直接写rewrite  /a.html  /b.html; 配置,在测试是其实会有些问题,比如在浏览器中访问时把192.168.88.5/a.html写成192.168.88.5/a.htmldc 或者写成 192.168.88.5/dc/a.html,访问都会正常显示b.html的页面,这是因为此时写的是只要包含a.html的都会跳转,没有进行精准匹配,可以进行以下修改,只有写a.html时才会正确跳转
[root@proxy nginx]# vim /usr/local/nginx/conf/nginx.conf
.. ..
server {
        listen       80;
        server_name  localhost;
        rewrite  ^/a\.html$  /b.html;       #新添加地址重写,a.html重定向到b.html  
        ...
[root@proxy nginx]# /usr/local/nginx/sbin/nginx  -s  reload
浏览器重新访问测试即可192.168.88.5/a.html,显示b.html页面内容
2)测试redirect选项
1)修改Nginx服务配置
[root@proxy nginx]# vim /usr/local/nginx/conf/nginx.conf
.. ..
server {
        listen       80;
        server_name  localhost;
        rewrite ^/a\.html$  /b.html  redirect;      #新修改,redirect重定向
        ...
    location / {
        root   html;
        index  index.html index.htm;
    }
}
2)重新加载配置文件
[root@proxy nginx]# /usr/local/nginx/sbin/nginx  -s  reload

3)浏览器测试,地址栏同时发生变化
http://192.168.88.5/a.html  #内容显示的是nginx-B~~,地址栏发生变化,是b.html页面
3)不同网站间跳转
修改Nginx服务配置实现访问192.168.88.5的请求重定向至www.tmooc.cn
[root@proxy nginx]# vim /usr/local/nginx/conf/nginx.conf
.. ..
server {
        listen       80;
        server_name  localhost;
    rewrite /  http://www.tmooc.cn/;        #新修改,访问旧网站的任意内容都跳转到新网站
    location / {
        root   html;
        index  index.html index.htm;
    }
}

2)重新加载配置文件
[root@proxy nginx]# /usr/local/nginx/sbin/nginx  -s  reload

3)客户端测试
http://192.168.88.5     #可以成功跳转
4)子页面重定向
修改配置文件(访问192.168.88.5/下面子页面,重定向至www.tmooc.cn/下相同的子页面)

1) 修改Nginx服务配置
[root@proxy nginx]# vim /usr/local/nginx/conf/nginx.conf
.. ..
server {
        listen       80;
        server_name  localhost;
    rewrite  /(.*)  http://www.tmooc.cn/$1;     #新修改
    location / {
        root   html;
        index  index.html index.htm;
    }
}

2)重新加载配置文件
[root@proxy nginx]# /usr/local/nginx/sbin/nginx  -s  reload

3)客户端测试
http://192.168.88.5/b.html      #成功跳转
5)实现不同浏览器跳转到不同页面
1) 创建网页目录以及对应的页面文件:
[root@proxy nginx]# mkdir  html/firefox
[root@proxy nginx]# echo  firefox~~  >  html/firefox/abc.html   #火狐专用页面
[root@proxy nginx]# echo  others~~  >  html/abc.html            #其他浏览器专用页面

火狐访问192.168.88.5/abc.html时可以看到html/firefox/abc.html里面内容
其他浏览器访问192.168.88.5/abc.html时可以看到html/abc.html里面内容

2) 修改Nginx服务配置
[root@proxy nginx]# vim /usr/local/nginx/conf/nginx.conf
.. ..
server {
        listen       80;
        server_name  localhost;
        if ($http_user_agent ~* firefox) {  #如果用户使用了火狐浏览器
            rewrite (.*)  /firefox/$1;      #就进行地址重写,让用户看到火狐专用页面,否则就是其他页面;$http_user_agent是nginx的内置变量,包含了发起 HTTP 请求的客户端的用户代理(User-Agent)字符串,比如用的什么浏览器
        }
    location / {
        root   html;
        index  index.html index.htm;
}

3)重新加载配置文件
[root@proxy nginx]# /usr/local/nginx/sbin/nginx  -s  reload

4)客户端测试
用火狐浏览器与其他浏览器访问相同地址192.168.88.5/abc.html,可以得到不同结果
火狐浏览器访问192.168.88.5/abc.html,得到结果firefox~~
其他浏览器访问192.168.88.5/abc.html,得到结果others~~
其他选项测试
redirect 临时重定向,状态码302
permanent 永久重定向,状态码301
last 不再读其他语句,但还会继续匹配其他location语句

1)修改Nginx服务配置
[root@proxy nginx]# vim /usr/local/nginx/conf/nginx.conf
.. ..
server {
        listen       80;
        server_name  localhost;
        rewrite ^/a\.html$  /b.html  permanent;     #新修改
        ...
    location / {
        root   html;
        index  index.html index.htm;
    }
}
2)重新加载配置文件
[root@proxy nginx]# /usr/local/nginx/sbin/nginx  -s  reload

3)浏览器测试,地址栏同时发生变化
http://192.168.88.5/a.html  #内容显示的是nginx-B~~,地址栏发生变化,是b.html页面


测试lastlast不再读其他语句
1)修改Nginx服务配置
[root@proxy nginx]# vim /usr/local/nginx/conf/nginx.conf
.. ..
server {
        listen       80;
        server_name  localhost;
        rewrite /a.html /b.html;        #新修改
        rewrite /b.html /c.html;        #新修改
        ...
}
...
2)重新加载配置文件
[root@proxy nginx]# /usr/local/nginx/sbin/nginx  -s  reload
[root@proxy nginx]# echo nginx-c~~ > html/c.html

3)浏览器测试
192.168.88.5/a.html #内容显示的是nginx-c~~


如果想要访问的是b.html的内容,可以做以下更改
[root@proxy nginx]# vim /usr/local/nginx/conf/nginx.conf
.. ..
server {
        listen       80;
        server_name  localhost;
        rewrite /a.html /b.html last;       #新修改
        rewrite /b.html /c.html;
        ...
}
...

重新加载配置文件
[root@proxy nginx]# /usr/local/nginx/sbin/nginx  -s  reload
浏览器测试访问
192.168.88.5/a.html #内容显示的是nginx-b~~


测试last会继续匹配其他location语句
[root@proxy nginx]# vim /usr/local/nginx/conf/nginx.conf
...
    location / {                #此处为默认的location
            rewrite /a.html /b.html last;   #新添加
            root   html;
            index  index.html index.htm;
        }
    location /b.html {                #这里是新添加的location
            rewrite /b.html /c.html;
        }
...        
重新加载配置文件
[root@proxy nginx]# /usr/local/nginx/sbin/nginx  -s  reload
客户端测试: http://192.168.88.5/a.html,显示为nginx-c~~

break 不再读其他语句,结束请求
[root@proxy nginx]# vim /usr/local/nginx/conf/nginx.conf
...
    location / {
            rewrite /a.html /b.html break;        #break可以阻止后面的语句
            root   html;
            index  index.html index.htm;
        }
    location /b.html {
            rewrite /b.html /c.html;
        }
...        
重新加载配置文件
[root@proxy nginx]# /usr/local/nginx/sbin/nginx  -s  reload
客户端测试: http://192.168.88.5/a.html,显示为nginx-b~~
四、编写systemd Unit文件
实验要求
掌握systemd进程如何管理其他服务器
    熟悉systemctl常用命令
    通过systemd管理Nginx服务
Unit文件语法格式参考表
语句	描述
Description	描述信息
After	在哪个服务之后启动
Before	在哪个服务之前启动
type	服务类型,默认为simple
EnvironmentFile	定义变量文件
ExecStart	执行systemctl start需要启动的进程名称
ExecStop	执行systemctl stop需要停止的进程名称
ExecReload	执行systemctl reload需要执行的命令
使用systemd管理Nginx服务
编写Unit文件
[root@web1 ~]# cd /usr/lib/systemd/system
[root@system ~]# cp httpd.service nginx.service
[root@system ~]# vim nginx.service
[Unit]
Description=The Nginx HTTP Server       #描述信息
After=network.target remote-fs.target nss-lookup.target     #在网络程序,网络文件系统,域名解析等服务启动之后,再启动nginx   
[Service]
Type=forking     #forking多进程类型服务
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/bin/kill -s QUIT $MAINPID        #kill给程序发送QUIT退出信号,关闭nginx
[Install]
WantedBy=multi-user.target
[root@web1 ~]#systemctl start nginx    #可以控制nginx开启了,这里如果无效可以尝试重启服务器

一、部署LNMP环境


环境说明
主机名    IP地址    角色
server1(已存在)    eth0:192.168.88.254/24    客户端
proxy(已存在)    eth0:192.168.88.5/24    web服务器
动态网站说明
安装部署LNMP环境实现动态网站解析
静态网站 在不同环境下访问,网站内容不会变化
动态网站 在不同环境下访问,网站内容有可能发生变化

目前的网站一般都会有动态和静态数据,默认nginx仅可以处理静态数据,用户访问任何数据都是直接返回对应的文件,如果如果访问的是一个脚本的话,就会导致直接返回一个脚本给用户,而用户没有脚本解释器,也看不懂脚本源代码

因此需要整合LNMP(Linux、Nginx、MySQL、PHP)实现动态网站效果
1)安装软件
为了不受到之前实验的影响,可以先删除nginx,重安装
[root@proxy ~]# /usr/local/nginx/sbin/nginx -s stop  #如果nginx没有停止,执行命令停止,如果已经停止,无需执行
[root@proxy ~]# rm -rf /usr/local/nginx/    #删除nginx原有目录
[root@proxy ~]# cd /root/lnmp_soft/nginx-1.22.1/
[root@proxy nginx-1.22.1]# yum -y install gcc make openssl-devel pcre-devel
[root@proxy nginx-1.22.1]# ./configure --with-http_ssl_module
[root@proxy nginx-1.22.1]# make && make install  #编译安装
2)安装MariaDB,php和php-fpm
[root@proxy nginx-1.22.1]# yum -y install mariadb  mariadb-server mariadb-devel php php-mysqlnd php-fpm

mariadb(数据库客户端软件)、mariadb-server(数据库服务器软件)、mariadb-devel(依赖包)、php(识别php语言)、php-fpm(进程管理器服务)、php-mysqlnd(PHP的数据库扩展包)
3)启动服务
1)启动Nginx服务
[root@proxy nginx-1.22.1]# /usr/local/nginx/sbin/nginx
[root@proxy nginx-1.22.1]# ss -antlp | grep 80
tcp   LISTEN 0      128          0.0.0.0:80        0.0.0.0:*    users:(("nginx",pid=15507,fd=6),("nginx",pid=15506,fd=6))

2)启动MySQL服务
[root@proxy nginx-1.22.1]# systemctl enable --now mariadb  #加入开机自启并立即启动
[root@proxy nginx-1.22.1]# systemctl status mariadb  #查看服务状态

3)启动PHP-FPM服务
[root@proxy nginx-1.22.1]# systemctl enable --now php-fpm  #加入开机自启并立即启动
[root@proxy nginx-1.22.1]# systemctl status php-fpm          #查看服务状态

4)使用PHP测试页面
[root@proxy nginx-1.22.1]# cp /root/lnmp_soft/php_scripts/test.php /usr/local/nginx/html/   #拷贝动态网站测试页面到nginx中
使用浏览器访问192.168.88.5/test.php 则无法看到页面内容,而是会当成要下载的文件,因为无法解析php动态页面


二、配置动静分离


配置动静分离
通过调整Nginx服务端配置,实现以下目标:
配置Fast-CGI支持PHP网页解析
Fast-CGI是快速公共(通用)网关接口,可以连接如nginx等网站程序到网站的语言解释器(比如php) ,php-fpm进程使用了Fast-CGI解析动态网站页面
1)修改Nginx配置文件并启动服务
[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
...
 65         location ~ \.php$ {     #~是使用正则表达式匹配以.php结尾,\ 转义
 66             root           html;
 67             fastcgi_pass   127.0.0.1:9000;  #将请求转发给本机php-fpm的9000端口
 68             fastcgi_index  index.php;       #网站默认页
 69             include        fastcgi.conf;    #加载fastcgi配置文件
 70         } 
2)修改 php-fpm配置文件
打开php-fpm配置文件,注意该配置文件中;(分号)是注释
[root@proxy nginx-1.22.1]# vim /etc/php-fpm.d/www.conf
 38 listen = 127.0.0.1:9000     #更改php-fpm端口号(使用网络通信)
[root@proxy nginx-1.22.1]# systemctl restart php-fpm    #重启服务
[root@proxy nginx-1.22.1]# ss -antlp | grep 9000        #查看监听端口
LISTEN 0      128        127.0.0.1:9000      0.0.0.0:*    users:(("php-fpm",pid=15808,fd=8),("php-fpm",pid=15807,fd=8),("php-fpm",pid=15806,fd=8),("php-fpm",pid=15805,fd=8),("php-fpm",pid=15804,fd=8),("php-fpm",pid=15803,fd=6))


了解:
[root@proxy nginx-1.22.1]# vim /etc/php-fpm.d/www.conf
115 pm.max_children = 50        #最大进程数量
120 pm.start_servers = 5        #最小进程数量
3)测试能否解析PHP页面
1)启动或者重加载nginx
[root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload
再次使用浏览器访问192.168.88.5/test.php 可以看到页面内容

2)再测试连接数据库的PHP页面
可以参考lnmp_soft/php_scripts/mysql.php
[root@proxy nginx-1.22.1]# cp  /root/lnmp_soft/php_scripts/mysql.php  /usr/local/nginx/html    #拷贝动态网站测试页面到nginx中

3)客户端使用浏览器访问服务器PHP首页文档,检验是否成功
http://192.168.88.5/mysql.php       #访问成功

然后修改数据库内容进行测试
[root@proxy nginx-1.22.1]# mysql   #进入数据库
MariaDB [(none)]> create user dc@localhost identified by '123';   #创建测试账户
MariaDB [(none)]> exit  #退出
浏览器访问192.168.88.5/mysql.php 可以看到新创建的用户
使用socket方式连接php-fpm
1)更改php-fpm配置文件
1)打开php-fpm配置文件
[root@proxy nginx-1.22.1]# vim /etc/php-fpm.d/www.conf
 38 listen = /run/php-fpm/www.sock                #socket方式(使用进程通信)
 55 listen.acl_users = apache,nginx,nobody        #添加nobody账户
[root@proxy nginx-1.22.1]# systemctl restart php-fpm    #重启服务

修改Nginx配置文件并启动服务
[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
...
 65         location ~ \.php$ {     #匹配以.php结尾
 66             root           html;
 67             fastcgi_pass   unix:/run/php-fpm/www.sock;  #将请求转发给php-fpm进程
 68             fastcgi_index  index.php;
 69             include        fastcgi.conf;        #加载fastcgi配置文件
 70         }
[root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload
使用浏览器访问192.168.88.5/test.php 可以看到页面内容


三、地址重写


地址重写语法
关于Nginx服务器的地址重写,主要用到的配置参数是rewrite

语法格式:
rewrite regex replacement flag
rewrite 旧地址   新地址    [选项]
1)修改配置文件(访问a.html重定向到b.html)
1)修改Nginx服务配置
[root@proxy nginx-1.22.1]# cd /usr/local/nginx/
[root@proxy nginx]# cp conf/nginx.conf.default conf/nginx.conf  #还原配置文件
cp: overwrite 'conf/nginx.conf'? y
[root@proxy nginx]# vim /usr/local/nginx/conf/nginx.conf
.. ..
server {
        listen       80;
        server_name  localhost;
        rewrite  /a.html  /b.html;       #新添加地址重写,a.html重定向到b.html  
        ...
    location / {
        root   html;
        index  index.html index.htm;
    }
}
[root@proxy nginx]# echo "nginx-B~~" > /usr/local/nginx/html/b.html

2)重新加载配置文件
[root@proxy nginx]# /usr/local/nginx/sbin/nginx  -s  reload

3)客户端测试
http://192.168.88.5/a.html          #内容显示的是nginx-B~~,但是地址栏没有发生变化,还是a.html页面

此时配置文件中直接写rewrite  /a.html  /b.html; 配置,在测试是其实会有些问题,比如在浏览器中访问时把192.168.88.5/a.html写成192.168.88.5/a.htmldc 或者写成 192.168.88.5/dc/a.html,访问都会正常显示b.html的页面,这是因为此时写的是只要包含a.html的都会跳转,没有进行精准匹配,可以进行以下修改,只有写a.html时才会正确跳转
[root@proxy nginx]# vim /usr/local/nginx/conf/nginx.conf
.. ..
server {
        listen       80;
        server_name  localhost;
        rewrite  ^/a\.html$  /b.html;       #新添加地址重写,a.html重定向到b.html  
        ...
[root@proxy nginx]# /usr/local/nginx/sbin/nginx  -s  reload
浏览器重新访问测试即可192.168.88.5/a.html,显示b.html页面内容
2)测试redirect选项
1)修改Nginx服务配置
[root@proxy nginx]# vim /usr/local/nginx/conf/nginx.conf
.. ..
server {
        listen       80;
        server_name  localhost;
        rewrite ^/a\.html$  /b.html  redirect;      #新修改,redirect重定向
        ...
    location / {
        root   html;
        index  index.html index.htm;
    }
}
2)重新加载配置文件
[root@proxy nginx]# /usr/local/nginx/sbin/nginx  -s  reload

3)浏览器测试,地址栏同时发生变化
http://192.168.88.5/a.html  #内容显示的是nginx-B~~,地址栏发生变化,是b.html页面
3)不同网站间跳转
修改Nginx服务配置实现访问192.168.88.5的请求重定向至www.tmooc.cn
[root@proxy nginx]# vim /usr/local/nginx/conf/nginx.conf
.. ..
server {
        listen       80;
        server_name  localhost;
    rewrite /  http://www.tmooc.cn/;        #新修改,访问旧网站的任意内容都跳转到新网站
    location / {
        root   html;
        index  index.html index.htm;
    }
}

2)重新加载配置文件
[root@proxy nginx]# /usr/local/nginx/sbin/nginx  -s  reload

3)客户端测试
http://192.168.88.5     #可以成功跳转
4)子页面重定向
修改配置文件(访问192.168.88.5/下面子页面,重定向至www.tmooc.cn/下相同的子页面)

1) 修改Nginx服务配置
[root@proxy nginx]# vim /usr/local/nginx/conf/nginx.conf
.. ..
server {
        listen       80;
        server_name  localhost;
    rewrite  /(.*)  http://www.tmooc.cn/$1;     #新修改
    location / {
        root   html;
        index  index.html index.htm;
    }
}

2)重新加载配置文件
[root@proxy nginx]# /usr/local/nginx/sbin/nginx  -s  reload

3)客户端测试
http://192.168.88.5/b.html      #成功跳转
5)实现不同浏览器跳转到不同页面
1) 创建网页目录以及对应的页面文件:
[root@proxy nginx]# mkdir  html/firefox
[root@proxy nginx]# echo  firefox~~  >  html/firefox/abc.html   #火狐专用页面
[root@proxy nginx]# echo  others~~  >  html/abc.html            #其他浏览器专用页面

火狐访问192.168.88.5/abc.html时可以看到html/firefox/abc.html里面内容
其他浏览器访问192.168.88.5/abc.html时可以看到html/abc.html里面内容

2) 修改Nginx服务配置
[root@proxy nginx]# vim /usr/local/nginx/conf/nginx.conf
.. ..
server {
        listen       80;
        server_name  localhost;
        if ($http_user_agent ~* firefox) {  #如果用户使用了火狐浏览器
            rewrite (.*)  /firefox/$1;      #就进行地址重写,让用户看到火狐专用页面,否则就是其他页面;$http_user_agent是nginx的内置变量,包含了发起 HTTP 请求的客户端的用户代理(User-Agent)字符串,比如用的什么浏览器
        }
    location / {
        root   html;
        index  index.html index.htm;
}

3)重新加载配置文件
[root@proxy nginx]# /usr/local/nginx/sbin/nginx  -s  reload

4)客户端测试
用火狐浏览器与其他浏览器访问相同地址192.168.88.5/abc.html,可以得到不同结果
火狐浏览器访问192.168.88.5/abc.html,得到结果firefox~~
其他浏览器访问192.168.88.5/abc.html,得到结果others~~
其他选项测试
redirect 临时重定向,状态码302
permanent 永久重定向,状态码301
last 不再读其他语句,但还会继续匹配其他location语句

1)修改Nginx服务配置
[root@proxy nginx]# vim /usr/local/nginx/conf/nginx.conf
.. ..
server {
        listen       80;
        server_name  localhost;
        rewrite ^/a\.html$  /b.html  permanent;     #新修改
        ...
    location / {
        root   html;
        index  index.html index.htm;
    }
}
2)重新加载配置文件
[root@proxy nginx]# /usr/local/nginx/sbin/nginx  -s  reload

3)浏览器测试,地址栏同时发生变化
http://192.168.88.5/a.html  #内容显示的是nginx-B~~,地址栏发生变化,是b.html页面


测试lastlast不再读其他语句
1)修改Nginx服务配置
[root@proxy nginx]# vim /usr/local/nginx/conf/nginx.conf
.. ..
server {
        listen       80;
        server_name  localhost;
        rewrite /a.html /b.html;        #新修改
        rewrite /b.html /c.html;        #新修改
        ...
}
...
2)重新加载配置文件
[root@proxy nginx]# /usr/local/nginx/sbin/nginx  -s  reload
[root@proxy nginx]# echo nginx-c~~ > html/c.html

3)浏览器测试
192.168.88.5/a.html #内容显示的是nginx-c~~


如果想要访问的是b.html的内容,可以做以下更改
[root@proxy nginx]# vim /usr/local/nginx/conf/nginx.conf
.. ..
server {
        listen       80;
        server_name  localhost;
        rewrite /a.html /b.html last;       #新修改
        rewrite /b.html /c.html;
        ...
}
...

重新加载配置文件
[root@proxy nginx]# /usr/local/nginx/sbin/nginx  -s  reload
浏览器测试访问
192.168.88.5/a.html #内容显示的是nginx-b~~


测试last会继续匹配其他location语句
[root@proxy nginx]# vim /usr/local/nginx/conf/nginx.conf
...
    location / {                #此处为默认的location
            rewrite /a.html /b.html last;   #新添加
            root   html;
            index  index.html index.htm;
        }
    location /b.html {                #这里是新添加的location
            rewrite /b.html /c.html;
        }
...        
重新加载配置文件
[root@proxy nginx]# /usr/local/nginx/sbin/nginx  -s  reload
客户端测试: http://192.168.88.5/a.html,显示为nginx-c~~

break 不再读其他语句,结束请求
[root@proxy nginx]# vim /usr/local/nginx/conf/nginx.conf
...
    location / {
            rewrite /a.html /b.html break;        #break可以阻止后面的语句
            root   html;
            index  index.html index.htm;
        }
    location /b.html {
            rewrite /b.html /c.html;
        }
...        
重新加载配置文件
[root@proxy nginx]# /usr/local/nginx/sbin/nginx  -s  reload
客户端测试: http://192.168.88.5/a.html,显示为nginx-b~~


四、编写systemd Unit文件


实验要求
掌握systemd进程如何管理其他服务器
    熟悉systemctl常用命令
    通过systemd管理Nginx服务
Unit文件语法格式参考表
语句    描述
Description    描述信息
After    在哪个服务之后启动
Before    在哪个服务之前启动
type    服务类型,默认为simple
EnvironmentFile    定义变量文件
ExecStart    执行systemctl start需要启动的进程名称
ExecStop    执行systemctl stop需要停止的进程名称
ExecReload    执行systemctl reload需要执行的命令
使用systemd管理Nginx服务
编写Unit文件
[root@web1 ~]# cd /usr/lib/systemd/system
[root@system ~]# cp httpd.service nginx.service
[root@system ~]# vim nginx.service
[Unit]
Description=The Nginx HTTP Server       #描述信息
After=network.target remote-fs.target nss-lookup.target     #在网络程序,网络文件系统,域名解析等服务启动之后,再启动nginx   
[Service]
Type=forking     #forking多进程类型服务
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/bin/kill -s QUIT $MAINPID        #kill给程序发送QUIT退出信号,关闭nginx
[Install]
WantedBy=multi-user.target
[root@web1 ~]#systemctl start nginx    #可以控制nginx开启了,这里如果无效可以尝试重启服务器

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/918319.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

React--》如何高效管理前端环境变量:开发与生产环境配置详解

在前端开发中,如何让项目在不同环境下表现得更为灵活与高效,是每个开发者必须面对的挑战,从开发阶段的调试到生产环境的优化,环境变量配置无疑是其中的关键。 env配置文件:通常用于管理项目的环境变量,环境…

HuggingFace:基于YOLOv8的人脸检测模型

个人操作经验总结 1、YOLO的环境配置 github 不论base环境版本如何,建议在conda的虚拟环境中安装 1.1、创建虚拟环境 conda create -n yolov8-face python3.9conda create :创建conda虚拟环境, -n :给虚拟环境命名的…

基于Python的仓库管理系统设计与实现

背景: 基于Python的仓库管理系统功能介绍 本仓库管理系统采用Python语言开发,利用Django框架和MySQL数据库,实现了高效、便捷的仓库管理功能。 用户管理: 支持员工和管理员角色的管理。 用户注册、登录和权限分配功能&#x…

当 docker-compose.yaml 文件部署时,Dify 线上版本升级过程

如果线上 Dify 是通过 docker-compose.yaml 文件部署的,那么当 Dify 版本升级时该如何操作呢?官方已经给出了 Docker compose 和 Source Code 两种方式。相对而言,前者更简单些,至少不需要安装依赖包和迁移数据库文件。为了更加具…

【H3C华三 】VRRP与BFD、Track联动配置案例

原创 厦门微思网络 组网需求 如图1所示,区域A和区域B用户所在网络的出口处部署了两台汇聚层设备(Device A和Device B)。 现要求使用VRRP与BFD、Track联动功能,实现以下需求: • 在Device A和Device B上分别配置两个…

记录配置ubuntu18.04下运行ORBSLAM3的ros接口的过程及执行单目imu模式遇到的问题(详细说明防止忘记)

今天的工作需要自己录制的数据集来验证昨天的标定结果 用ORBSLAM3单目imu模式运行,mentor给的是一个rosbag格式的数据包,配置过程出了几个问题记录一下,沿配置流程写。 一.orbslam3编译安装 1.首先是安装各种依赖 这里不再赘述&#xff0…

【汇编】c++游戏开发

由一起学编程创作的‘C/C项目实战:2D射击游戏开发(简易版), 440 行源码分享来啦~’: C/C项目实战:2D射击游戏开发(简易版), 440 行源码分享来啦~_射击c-CSDN博客文章浏览…

Vue Canvas实现区域拉框选择

canvas.vue组件 <template><div class"all" ref"divideBox"><!-- 显示图片&#xff0c;如果 imgUrl 存在则显示 --><img id"img" v-if"imgUrl" :src"imgUrl" oncontextmenu"return false" …

JavaWeb--MySQL

1. MySQL概述 首先来了解一下什么是数据库。 数据库&#xff1a;英文为 DataBase&#xff0c;简称DB&#xff0c;它是存储和管理数据的仓库。 像我们日常访问的电商网站京东&#xff0c;企业内部的管理系统OA、ERP、CRM这类的系统&#xff0c;以及大家每天都会刷的头条、抖音…

在MATLAB中导入TXT文件的若干方法

这是一篇关于如何在MATLAB中导入TXT文件的文章&#xff0c;包括示例代码和详细说明 文章目录 在MATLAB中导入TXT文件1. 使用readtable函数导入TXT文件示例代码说明 2. 使用load函数导入TXT文件示例代码说明 3. 使用importdata函数导入TXT文件示例代码说明 4. 自定义导入选项示例…

Clonezilla 再生龙制作系统U盘还原系统 ubuntu 22.04 server

参考 Clonezilla 再生龙制作系统U盘还原系统(UltraISO) https://blog.csdn.net/qq_57172130/article/details/120417522 Clonezilla-备份_部署ubuntu https://blog.csdn.net/xiaokai1999/article/details/131054826 基于再生龙&#xff08;clonezilla&#xff09;的Ubuntu镜…

号卡分销系统,号卡系统,物联网卡系统源码安装教程

号卡分销系统&#xff0c;号卡系统&#xff0c;物联网卡系统&#xff0c;&#xff0c;实现的高性能(PHP协程、PHP微服务)、高灵活性、前后端分离(后台)&#xff0c;PHP 持久化框架&#xff0c;助力管理系统敏捷开发&#xff0c;长期持续更新中。 主要特性 基于Auth验证的权限…

Nature Communications 基于触觉手套的深度学习驱动视触觉动态重建方案

在人形机器人操作领域&#xff0c;有一个极具价值的问题&#xff1a;鉴于操作数据在人形操作技能学习中的重要性&#xff0c;如何有效地从现实世界中获取操作数据的完整状态&#xff1f;如果可以&#xff0c;那考虑到人类庞大规模的人口和进行复杂操作的简单直观性与可扩展性&a…

STM32 独立看门狗(IWDG)详解

目录 一、引言 二、独立看门狗的作用 三、独立看门狗的工作原理 1.时钟源 2.计数器 3.喂狗操作 4.超时时间计算 5.复位机制 四、独立看门狗相关寄存器 1.键寄存器&#xff08;IWDG_KR&#xff09; 2.预分频寄存器&#xff08;IWDG_PR&#xff09; 3.重载寄存器&…

vue3点击按钮el-dialog对话框不显示问题

vue3弹框不显示问题&#xff0c;控制台也没报错 把 append-to-body:visible.sync"previewDialogOpen" 改为 append-to-bodyv-model"previewDialogOpen" 就好了。

vue项目使用eslint+prettier管理项目格式化

代码格式化、规范化说明 使用eslintprettier进行格式化&#xff0c;vscode中需要安装插件ESLint、Prettier - Code formatter&#xff0c;且格式化程序选择为后者&#xff08;vue文件、js文件要分别设置&#xff09; 对于eslint规则&#xff0c;在格式化时不会全部自动调整&…

Python爬虫----python爬虫基础

一、python爬虫基础-爬虫简介 1、现实生活中实际爬虫有哪些&#xff1f; 2、什么是网络爬虫&#xff1f; 3、什么是通用爬虫和聚焦爬虫&#xff1f; 4、为什么要用python写爬虫程序 5、环境和工具 二、python爬虫基础-http协议和chrome抓包工具 1、什么是http和https协议…

大数据新视界 -- 大数据大厂之 Impala 性能飞跃:动态分区调整的策略与方法(上)(21 / 30)

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

Java基础-Java多线程机制

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;请留下您的足迹&#xff09; 目录 一、引言 二、多线程的基本概念 1. 线程与进程 2. 多线程与并发 3. 多线程的优势 三、Java多线程的实…

Unity中HDRP设置抗锯齿

一、以前抗锯齿的设置方式 【Edit】——>【Project Settings】——>【Quality】——>【Anti-aliasing】 二、HDRP项目中抗锯齿的设置方式 在Hierarchy中——>找到Camera对象——>在Inspector面板上——>【Camera组件】——>【Rendering】——>【Pos…