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.rhkb.cn/news/471935.html

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

相关文章

医院信息化与智能化系统(21)

医院信息化与智能化系统(21) 这里只描述对应过程,和可能遇到的问题及解决办法以及对应的参考链接,并不会直接每一步详细配置 如果你想通过文字描述或代码画流程图,可以试试PlantUML,告诉GPT你的文件结构,让他给你对应…

《FreeRTOS任务控制块篇》

Task control block, 即任务控制块。任务控制块(TCB)是一个结构体,它会分配给每个任务,其中存储着任务的状态信息,包括指向任务上下文(任务的运行时环境,包括寄存器值)的指针。任务控…

Queuing 表(buffer表)的优化实践 | OceanBase 性能优化实践

案例问题描述 该案例来自一个金融行业客户的问题:他们发现某个应用对一个数据量相对较小的表(仅包含数千条记录)访问时,频繁遇到性能下降的情况。为解决此问题,客户向我们求助进行分析。我们发现这张表有频繁的批量插…

ssh登陆服务器后支持Tab键命令补全

在服务器上新建了用户后,通过ssh登录到服务器后发现不能使用Tab键来进行命令补全 截图如下: 以为没有配置.bashrc 此时输入 source 发现无此命令 细心的可以发现 -sh 于是输入命令echo $SHELL 确认此时的shell为sh, 只要输入命令bash即可切…

[白月黑羽]关于仿写类postman功能软件题目的解答

原题: 答: python文件如下 from PySide6.QtWidgets import QApplication, QMessageBox,QTableWidgetItem,QHeaderView,QWidget,QTableWidget from PySide6.QtCore import QEvent,QObject from PySide6.QtUiTools import QUiLoader import time import …

Postman接口测试(断言、关联、参数化、输出测试报告)

基本界面展示 Get、Post请求 Postman断言 使用postman来判断预期结果与实际结果是否一致 响应状态码断言 响应包含字符串 断言判断字符串的格式 关联 用于解决http请求之间存在依赖关系 依赖:一个http请求的响应结果中的数据,被另一个请求使用 登…

【卡尔曼滤波】数据融合Fusion的应用 C语言、Python实现(Kalman Filter)

【卡尔曼滤波】数据融合Fusion的应用 C语言、Python实现(Kalman Filter) 更新以gitee为准: gitee地址 文章目录 卡尔曼滤波数据融合Python实现C语言实现多个数据如何融合附录:压缩字符串、大小端格式转换压缩字符串浮点数压缩Pac…

网络原理-网络层和数据链路层

一、网络层 1、IP协议完成的工作 地址管理:使用一套地址体系来描述所没备的位置 路由选择:一个数据包如何从网络的某个地址传到另一个地址 2、IP报头 4 位版本号:取值为4或6 (IPv4/IPv6) 4 位首部长度:IP报头,单位…

【Three.js基础学习】22.New project structure

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 前言 这里将使用全新的项目结构,将不同工具分层,区分开使用。 一、结构目录 二、对应文件 1.script.js 获取画布,引入样式和功能。 /* 课…

AI风向标|算力与通信的完美融合,SRM6690解锁端侧AI的智能密码

当前,5G技术已经成为推动数字经济和实体经济深度融合的关键驱动力,进入5G发展的下半场,5G与AI的融合正推动诸多行业的数字化转型和创新发展,终端侧AI和端云混合式AI将广泛应用于各类消费终端和各行各业。 在推动5G和AI与各行业场…

【WPF】Prism学习(二)

Prism Commands 1.命令(Commanding) 1.1. ViewModel的作用: ViewModel不仅提供在视图中显示或编辑的数据,还可能定义一个或多个用户可以执行的动作或操作。这些用户可以通过用户界面(UI)执行的动作或操作…

智慧建造-运用Trimble技术将梦幻水族馆变为现实【上海沪敖3D】

项目概述 西雅图水族馆耗资1.6亿美元对海洋馆进行扩建。该项目包括建造三个大型栖息地,每个建筑物几乎都没有直边,其中一个主栖息地由520立方米混凝土和355吨钢筋组成。特纳建筑公司的混凝土团队通过强大的贸易合作伙伴和创新的数字制造技术,…

kubesphere环境-本地Harbor仓库+k8s集群(单master 多master)+Prometheus监控平台部署

前言:半月前在公司生产环境上离线部署了k8s集群Victoria Metrics(二开版)自研版夜莺 监控平台的搭建,下面我租用3台华为云服务器演示部署kubesphere环境-本地Harbor仓库k8s集群(单master节点 & 单master节点)Prometheus监控部…

java 随机生成验证码

1.需求 实现随机生成验证码,验证码可能是大小写字母和数字 2.实现 写一个getCode方法实现 public static String getCode(int n){//1. 定义一个字符串,字符串中包含大小写字母和数字String str "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrs…

Unity图形学之Blend指令

1.渲染流程:Blend 决定了要渲染的像素和Gbuffer里像素到底怎么取舍 2.Blend 公式: 3.factor可以取值的内容有: One 1 Zero :0 SrcColor : 要渲染的像素 SrcAlpha : 要渲染像素的 a 通道。 DstColor : 已经渲染在gbuffer…

林曦词典|养生

“林曦词典”是在水墨画家林曦的课堂与访谈里,频频邂逅的话语,总能生发出无尽的思考。那些悠然轻快的、微妙纷繁的,亦或耳熟能详的词,经由林曦老师的独到解析,意蕴无穷,让人受益。于是,我们将诸…

生成自签名证书并配置 HTTPS 使用自签名证书

生成自签名证书 1. 运行 OpenSSL 命令生成证书和私钥 在终端中输入以下命令,生成自签名证书和私钥文件: sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout self_signed.key -out self_signed.pem-x509:生成自签名证书。…

物料数据对接:轻易云助力聚水潭与金蝶云星空集成方案

聚水潭数据集成到金蝶云星空:物料对接方案 在企业信息化系统中,数据的高效流动和准确对接是业务运营的关键。本文将聚焦于一个具体的技术案例——如何通过轻易云数据集成平台实现聚水潭与金蝶云星空之间的物料数据对接。 本次集成任务主要涉及两个核心…

阅读2020-2023年《国外军用无人机装备技术发展综述》笔记_作战无人机和察打无人机图鉴

文献基本信息 题名作者来源发表时间2020年国外先进军用无人机技术发展综述 袁成;董晓琳;朱超磊 飞航导弹 2021-01-14 2021年国外军用无人机装备技术发展综述 朱超磊 ;袁成;杨佳会;飞航导弹 战术导弹技术2022-02-112022年国外军用无人机装备技术发展综述 朱超磊;金钰;王靖…