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-fpmmariadb(数据库客户端软件)、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.conf38 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.conf38 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.html2)重新加载配置文件
[root@proxy nginx]# /usr/local/nginx/sbin/nginx  -s  reload3)客户端测试
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  reload3)浏览器测试,地址栏同时发生变化
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  reload3)客户端测试
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  reload3)客户端测试
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  reload4)客户端测试
用火狐浏览器与其他浏览器访问相同地址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  reload3)浏览器测试,地址栏同时发生变化
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.html3)浏览器测试
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 / {                #此处为默认的locationrewrite /a.html /b.html last;   #新添加root   html;index  index.html index.htm;}location /b.html {                #这里是新添加的locationrewrite /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开启了,这里如果无效可以尝试重启服务器

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

组件间通信(组件间传递数据)

组件间通信(组件间传递数据) 在 Vue.js 中,组件间通信是开发者需要经常处理的任务,特别是在构建具有多层次组件的复杂应用时。根据组件之间的关系和数据流的复杂程度,可以采用不同的通信方式。以下是常用的几种组件间通信方式: …

使用Element UI实现前端分页,及el-table表格跨页选择数据,切换分页保留分页数据,限制多选数量

文章目录 一、前端分页1、模板部分 (\<template>)2、数据部分 (data)3、计算属性 (computed)4、方法 (methods) 二、跨页选择1、模板部分 (\<template>)2、数据部分 (data)3、方法 (methods) 三、限制数量1、模板部分 (\<template>)2、数据部分 (data)3、方法…

GitLab 如何跨版本升级?

本分分享 GitLab 跨版本升级的一些注意事项。 众所周知&#xff0c;GitLab 的升级必须要严格遵循升级路径&#xff0c;否则就会出现问题&#xff0c;导致升级失败。因此&#xff0c;在 GitLab 升级之前需要做好两件事情&#xff1a; 当前版本的确认升级路径的确认 极狐GitLa…

网上商城系统设计与Spring Boot框架

3 系统分析 当用户确定开发一款程序时&#xff0c;是需要遵循下面的顺序进行工作&#xff0c;概括为&#xff1a;系统分析–>系统设计–>系统开发–>系统测试&#xff0c;无论这个过程是否有变更或者迭代&#xff0c;都是按照这样的顺序开展工作的。系统分析就是分析系…

LabVIEW 实现 find_nearest_neighbors 功能(二维平面上的最近邻查找)

1. 背景介绍 在数据分析和图像处理领域&#xff0c;经常需要查找给定点的最近邻居点。在LabVIEW中&#xff0c;计算二维平面上多个点之间的欧氏距离&#xff0c;并返回距离最近的几个点是一种常见操作。find_nearest_neighbors 函数用于实现这个功能。 2. 欧氏距离计算 在二维…

Python如何从HTML提取img标签下的src属性

目录 前提准备步骤1. 解析HTML内容2. 查找所有的img标签3. 提取src属性 完整代码 前提准备 在处理网页数据时&#xff0c;我们经常需要从HTML中提取特定的信息&#xff0c;比如图片的URL。 这通常通过获取img标签的src属性来实现。 在开始之前&#xff0c;你需要确保已经安装…

nacos-operator在k8s集群上部署nacos-server2.4.3版本踩坑实录

文章目录 操作步骤1. 拉取仓库代码2. 安装nacos-operator3. 安装nacos-server 坑点一坑点二nacos-ui页面访问同一集群环境下微服务连接nacos地址配置待办参考文档 操作步骤 1. 拉取仓库代码 &#xff08;这一步主要用到代码中的相关yml文件&#xff0c;稍加修改用于部署容器&…

鸿蒙版APP-图书购物商城案例

鸿蒙版-小麦图书APP是基于鸿蒙ArkTS-API12环境进行开发&#xff0c;不包含后台管理系统&#xff0c;只有APP端&#xff0c;页面图书数据是从第三方平台(聚合数据)获取进行展示的&#xff0c;包含登录&#xff0c;图书类别切换&#xff0c;图书列表展示&#xff0c;图书详情查看…

Vulnhub靶场案例渗透[8]- HackableII

文章目录 一、靶场搭建1. 靶场描述2. 下载靶机环境3. 靶场搭建 二、渗透靶场1. 确定靶机IP2. 探测靶场开放端口及对应服务3. 扫描网络目录结构4. ftp文件上传漏洞5. 反弹shell6. 提权 一、靶场搭建 1. 靶场描述 difficulty: easy This works better with VirtualBox rather t…

Pycharm 配置 Poetry

Python 环境安装 参考以下&#xff1a; 官网安装步骤 CODA方式安装 Poetry 安装 Poetry在windows下的安装使用 1.下载软件包 下载地址 2.获取安装脚本下载地址 3.使用命令安装 打开cmd&#xff0c;进入安装包和脚本文件所在目录&#xff0c;执行命令&#xff1a; python …

反转链表

反转链表 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3,2,1]示例 2&#xff1a; 输入&#xff1a;head [1,2] 输出&#xff1a;[2,1]示例 3&#xff1…

【Docker】Mac安装Docker Desktop导致磁盘剩余空间较少问题如何解决?

目录 一、背景描述 二、解决办法 三、清理效果 四、理论参考 解决方法 1. 清理未使用的 Docker 镜像、容器和卷 2. 查看 Docker 使用的磁盘空间 3. 调整 Docker 的存储位置 4. 增加磁盘空间 5. 调整 Docker Desktop 配置 6. 使用 Docker 清理工具&#xff08;例如 D…

SQL Server 查询设置 - LIKE/DISTINCT/HAVING/排序

目录 背景 一、LIKE - 模糊查询 1. 通配符 % 2. 占位符 _ 3. 指定集合 [] 3.1 表示否定 ^ 3.2 表示范围 - 4. 否定 NOT 二、DISTINCT - 去重查询 三、HAVING - 过滤查询 四、小的查询设置 1. ASC|DESC - 排序 2. TOP - 限制 3. 子查询 4. not in - 取补集&…

Android OpenGL ES详解——立方体贴图

目录 一、概念 二、如何使用 1、创建立方体贴图 2、生成纹理 3、设置纹理环绕和过滤方式 4、激活和绑定立方体贴图 三、应用举例——天空盒 1、概念 2、加载天空盒 3、显示天空盒 4、优化 四、应用举例——环境映射:反射 五、应用举例——环境映射:折射 六、应用…

pipx安装提示找不到包

执行&#xff1a; pipx install --include-deps --force "ansible6.*"WARNING: Retrying (Retry(total4, connectNone, readNone, redirectNone, statusNone)) after connection broken by NewConnectionError(<pip._vendor.urllib3.connection.HTTPSConnection …

VMware 17虚拟Ubuntu 22.04设置共享目录

VMware 17虚拟Ubuntu 22.04设置共享目录 共享文件夹挂载命令&#xff01;&#xff01;&#xff01;<font colorred>配置启动自动挂载Chapter1 VMware 17虚拟Ubuntu 22.04设置共享目录一、卸载老版本二、安装open-vm-tools<font colorred>三、配置启动自动挂载四、添…

Python用CEEMDAN-LSTM-VMD金融股价数据预测及SVR、AR、HAR对比可视化

全文链接&#xff1a;https://tecdat.cn/?p38224 分析师&#xff1a;Duqiao Han 股票市场是一个复杂的非线性系统&#xff0c;股价受到许多经济和社会因素的影响。因此&#xff0c;传统的线性或近线性预测模型很难有效、准确地预测股票指数的价格趋势。众所周知&#xff0c;深…

ubuntu20.04默认的python3.8升级到python3.10

Python 3.8 于 2019 年 10 月发布&#xff0c;距今已有五年时间。2024 年 10 月是 Python 3.8 版本发布的最后一个月&#xff0c;从 2024 年 10 月开始&#xff0c;如果存在安全错误&#xff0c;Python 开发团队将不会修复该错误。有必要把python3.8升级python3.10。 新加apt源…

数据结构 ——— 层序遍历链式二叉树

目录 链式二叉树示意图​编辑 何为层序遍历 手搓一个链式二叉树 实现层序遍历链式二叉树 链式二叉树示意图 何为层序遍历 和前中后序遍历不同&#xff0c;前中后序遍历链式二叉树需要利用递归才能遍历 而层序遍历是非递归的形式&#xff0c;如上图&#xff1a;层序遍历的…

DevOps工程技术价值流:加速业务价值流的落地实践与深度赋能

DevOps的兴起&#xff0c;得益于敏捷软件开发的普及与IT基础设施代码化管理的革新。敏捷宣言虽已解决了研发流程中的诸多挑战&#xff0c;但代码开发仅是漫长价值链的一环&#xff0c;开发前后的诸多问题仍亟待解决。与此同时&#xff0c;虚拟化和云计算技术的飞跃&#xff0c;…