一、动静分离
1.单台机器动静分离
[ root@web01 ~]
server {
listen 80;
server_name linux.wp.com;
location / {
root /code/wordpress;
index index.php;
}
location ~* \.( jpg| png| gif) $ {
root /code/wordpress;
}
location ~* \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME /code/wordpress/$fastcgi_script_name ;
include fastcgi_params;
}
}
2.多台机器的动静分离
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bqXrZPiB-1607338376425)(C:\Users\秋风、亦冷\AppData\Roaming\Typora\typora-user-images\image-20201207185156681.png)]
1)准备环境
主机 作用 服务 IP lb01 负载均衡 nginx 10.0.0.4 web01 静态资源 nginx 10.0.0.7 web02 动态资源 tomcat 10.0.0.8
2)配置web01的静态资源
1.配置nginx
[ root@web01 ~]
server {
listen 80;
server_name linux.dj.com;
location ~* \.( jpg| png| mp4| gif) $ {
root /code/picture;
}
}
[ root@web01 ~]
2.上传静态资源
[ root@web01 ~]
[ root@web01 ~]
[ root@web01 picture]
[ root@web01 picture]
total 1756
-rw-r--r--. 1 root root 156617 Dec 7 08:54 1.jpg
-rw-r--r--. 1 root root 47542 Dec 7 08:54 2.jpg
-rw-r--r--. 1 root root 1586108 Dec 7 08:54 3.jpg
3.测试静态资源
1)配置hosts
10.0.0.7 linux.dj.com
2)请求静态资源
http://linux.dj.com/1.jpg
3)配置web02的动态资源
1.安装tomcat
[ root@web02 ~]
2.配置动态资源
[ root@web02 ~]
[ root@web02 webapps]
[ root@web02 webapps]
< %@ page language= "java" import= "java.util.*" pageEncoding= "utf-8" %>
< HTML>
< HEAD>
< TITLE> 测试动态资源< /TITLE>
< /HEAD>
< BODY>
< %
Random rand = new Random( ) ;
out.println( "<h1>随机数:<h1>" ) ;
out.println( rand.nextInt( 99) +100) ;
%>
< /BODY>
< /HTML>
3.启动方式
[ root@web02 ~]
4.访问测试动态页面
1)配置hosts
10.0.0.8 linux.dj.com
2)访问
http://linux.dj.com:8080/java_test.jsp
4)配置负载均衡
1.配置
[ root@lb01 ~]
upstream dt {
server 10.0.0.8:8080;
}
upstream jt {
server 10.0.0.7;
}
server {
listen 80;
server_name linux.dj.com;
location / {
root /code/dj;
index index.html;
}
location ~* \.( jpg| png| gif) $ {
proxy_pass http://jt;
include proxy_params;
}
location ~* \.( php| jsp) $ {
proxy_pass http://dt;
include proxy_params;
}
}
2.重启
[ root@lb01 ~]
3.访问测试
1)配置hosts
10.0.0.4 linux.dj.com
2)访问
http://linux.dj.com/java_test.jsp
http://linux.dj.com/1.jpg
5)整合静态资源和动态资源
1.创建站点目录
[ root@lb01 ~]
2.编辑html文件
[ root@lb01 ~]
< html lang= "en" >
< head>
< meta charset= "UTF-8" />
< title> 测试ajax和跨域访问< /title>
< script src= "http://libs.baidu.com/jquery/2.1.4/jquery.min.js" > < /script>
< /head>
< script type= "text/javascript" >
$( document) .ready( function( ) {
$.ajax( {
type: "GET" ,
url: "http://linux.dj.com/java_test.jsp" ,
success: function( data) {
$( "#get_data" ) .html( data)
} ,
error: function( ) {
alert( "哎呦喂,失败了,回去检查你服务去~" ) ;
}
} ) ;
} ) ;
< /script>
< body>
< h1> 测试动静分离< /h1>
< img src= "http://linux.dj.com/1.jpg" >
< div id= "get_data" > < /div>
< /body>
< /html>
3.授权
[ root@lb01 ~]
4.访问域名测试
结论:静态资源出现问题不影响动态资源,动态资源出问题不影响静态资源
二、nginx资源分离
1.准备环境
主机 IP 功能 lb01 10.0.0.4,172.16.1.4 负载均衡 web01 172.16.1.7 Android页面 web02 172.16.1.8 iPhone页面 web03 172.16.1.9 PC端页面
2.配置web01服务器
1)配置nginx
[ root@web01 ~]
server {
listen 80;
server_name linux.sj.com;
charset utf8;
location / {
root /code/android;
index index.html;
}
}
[ root@web01 ~]
2)创建站点目录
[ root@web01 ~]
[ root@web01 ~]
[ root@web01 ~]
3)访问测试
1.配置hosts
10.0.0.7 linux.sj.com
3.配置web02服务器
1)配置nginx
[ root@web02 ~]
server {
listen 80;
server_name linux.sj.com;
charset utf8;
location / {
root /code/iphone;
index index.html;
}
}
2)创建站点文件
[ root@web02 ~]
[ root@web02 ~]
[ root@web02 ~]
3)访问测试
1.配置hosts
10.0.0.8 linux.sj.com
4.配置web03服务器
1)配置nginx
[ root@web03 ~]
server {
listen 80;
server_name linux.sj.com;
charset utf8;
location / {
root /code/pc;
index index.html;
}
}
[ root@web02 ~]
2)创建站点文件
[ root@web03 ~]
[ root@web03 ~]
[ root@web03 ~]
3)访问测试
1.配置hosts
10.0.0.9 linux.sj.com
5.配置负载均衡
1.配置nginx
[ root@lb01 ~]
upstream android {
server 10.0.0.7;
}
upstream iphone {
server 10.0.0.8;
}
upstream pc {
server 10.0.0.9;
}
server {
listen 80;
server_name linux.sj.com;
location / {
if ( $http_user_agent ~* "Android" ) {
proxy_pass http://android;
}
if ( $http_user_agent ~* "iPhone" ) {
proxy_pass http://iphone;
}
if ( $http_user_agent ~* "WOW64" ) {
return 403;
}
proxy_pass http://pc;
include proxy_params;
}
}
2.重启访问
1.重启
[ root@lb01 ~]
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[ root@lb01 ~]
2.配置hosts
10.0.0.4 linux.sj.com
3.访问
Nginx的Rewrite重写
一、Rewrite基本概述
1.什么是rewrite
Rewrite主要实现url地址重写,以及重定向,就是把传入web的请求重定向到其他url的过程
2.rewrite使用场景
1.地址跳转,用户访问www.linux.com这个URL是,将其定向至一个新的域名www.baidu.com
2.协议跳转,用户通过http协议请求网站时,将其重新跳转至https协议方式
3.伪静态,将动态页面显示为静态页面方式的一种技术,便于搜索引擎的录入,同时建上动态URL地址对外暴露过多的参数,提升更高的安全性。
4.搜索引擎,SEO优化依赖于url路径,好记的url便于搜索引擎录入
3.rewrite语法
Syntax: rewrite regex replacement [ flag] ;
Default: —
Context: server, location, if
rewrite
regex
replacement
[ flag] ;
location /download/ {
rewrite ^( /download/.*) /media/( .*) \.. *$ $1 /mp3/$2 .mp3 break ;
rewrite ^( /download/.*) /audio/( .*) \.. *$ $1 /mp3/$2 .ra break ;
return 403;
}
二、Rewrite标记Flag
rewrite指令根据表达式来重定向URL,或者修改字符串,可以应用于server,location,if环境下,每行rewrite指令最后跟一个flag标记,支持的flag标记有如下表格所示:
flag 作用 last 本条规则匹配完成后,停止匹配,不再匹配后面的规则 break 本条规则匹配完成后,停止匹配,不再匹配后面的规则 redirect 返回302临时重定向,地址栏会显示跳转后的地址 permanent 返回301永久重定向,地址栏会显示跳转后的地址
1.last和break的区别
1)配置nginx
[ root@web01 ~]
server {
listen 80;
server_name linux.rewrite.com;
root /code;
location ~ ^/break {
rewrite ^/break /test/ break ;
}
location ~ ^/last {
rewrite ^/last /test/ last;
}
location /test/ {
default_type application/json;
return 200 "ok" ;
}
}
2)重启
[ root@web01 ~]
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[ root@web01 ~]
3)配置hosts访问测试
10.0.0.7 linux.rewrite.com
4)结论
break 只要匹配到规则,则会去本地配置路径的目录中寻找请求的文件;
而last只要匹配到规则,会对其所在的server( .. .) 标签重新发起请求。
break请求:
1.请求linux.rewrite.com/break
2.匹配 location ~ ^/break 会跳转到 linux.rewrite.com/test
3.请求跳转后,回去查找本地站点目录下的 /test
4.如果找到了,则返回/code/test/index.html的内容;
5.如果没找到该目录则报错404,如果找到该目录没找到对应的文件则403
last请求:
1.请求linux.rewrite.com/last
2.匹配 location ~ ^/last 会跳转到 linux.rewrite.com/test
3.如果找到了,则返回/code/test/index.html的内容;
4.如果没有找到,会重新对当前server发起请求,这个时候访问地址就变成 linux.rewrite.com/test
5.重新请求server会匹配到 location /test/ 直接返回该location的内容
6.如果也没有location匹配,再返回404;
2.redirect和permanent的区别
1)配置nginx
[ root@web01 ~]
server {
listen 80;
server_name linux.rewrite.com;
root /code;
location /test {
rewrite ^( .*) $ https://www.baidu.com redirect;
}
}
2)配置hosts测试
1.配置hosts
10.0.0.7 linux.rewrite.com
1)配置redirect时,访问失败,直接拒绝访问
2)配置permanent时,访问成功,继续进行跳转,清楚缓存后访问失败
3)结论
redirect: 每次请求都会询问服务器,如果当服务器不可用时,则会跳转失败。
permanent: 第一次请求会询问,浏览器会记录跳转的地址,第二次则不再询问服务器,直接通过浏览器缓存的地址跳转。
三、rewrite案例
1.
2.
3.
4.
5.将 http 请求跳转到 https
server {
listen 80;
server_name linux.rewrite.com;
rewrite ^( .*) https://$server_name $1 redirect;
}
server {
listen 443;
server_name blog.driverzeng.com;
ssl on;
}
URL: http://www.baidu.com:80/code/index.html
URI: /code/index.html
四、rewrite的伪静态
1.搭建discuz论坛
1)创建站点目录
[ root@web01 ~]
2)解压代码
1.上传代码包
[ root@web01 ~]
[ root@web01 ~]
-rw-r--r--. 1 root root 10829853 Dec 7 12:04 Discuz_X3.3_SC_GBK.zip
2.解压
[ root@web01 ~]
[ root@web01 ~]
3)配置nginx配置文件
[ root@web01 ~]
server {
listen 80;
server_name linux.discuz.com;
root /code/discuz/upload;
location / {
root /code/discuz/upload;
index index.php;
}
location ~* \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root $fastcgi_script_name ;
include fastcgi_params;
}
}
4)重启
[ root@web01 ~]
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[ root@web01 ~]
5)配置hosts访问测试
10.0.0.7 linux.discuz.com
http://linux.discuz.com/install/
6)根据页面操作
7)创建数据库
[ root@db01 ~]
MariaDB [ ( none) ] > create database discuz;
Query OK, 1 row affected ( 0.00 sec)
MariaDB [ ( none) ] > grant all on discuz.* to discuz@'172.16.1.%' identified by '123456' ;
Query OK, 0 rows affected ( 0.00 sec)
8)配置伪静态
[ root@web01 ~]
server {
listen 80;
server_name linux.discuz.com;
root /code/discuz/upload;
location / {
root /code/discuz/upload;
index index.php;
rewrite ^( [ ^\.] *) /topic-( .+) \.html$ $1 /portal.php?mod= topic& topic= $2 last;
rewrite ^( [ ^\.] *) /article-( [ 0-9] +) -( [ 0-9] +) \.html$ $1 /portal.php?mod= view& aid= $2 & page= $3 last;
rewrite ^( [ ^\.] *) /forum-( \w+) -( [ 0-9] +) \.html$ $1 /forum.php?mod= forumdisplay& fid= $2 & page= $3 last;
rewrite ^( [ ^\.] *) /thread-( [ 0-9] +) -( [ 0-9] +) -( [ 0-9] +) \.html$ $1 /forum.php?mod= viewthread& tid= $2 & extra= page%3D$4 & page= $3 last;
rewrite ^( [ ^\.] *) /group-( [ 0-9] +) -( [ 0-9] +) \.html$ $1 /forum.php?mod= group& fid= $2 & page= $3 last;
rewrite ^( [ ^\.] *) /space-( username| uid) -( .+) \.html$ $1 /home.php?mod= space& $2 = $3 last;
rewrite ^( [ ^\.] *) /blog-( [ 0-9] +) -( [ 0-9] +) \.html$ $1 /home.php?mod= space& uid= $2 & do= blog& id= $3 last;
rewrite ^( [ ^\.] *) /( fid| tid) -( [ 0-9] +) \.html$ $1 /archiver/index.php?action= $2 & value= $3 last;
rewrite ^( [ ^\.] *) /( [ a-z] +[ a-z0-9_] *) -( [ a-z0-9_\-] +) \.html$ $1 /plugin.php?id= $2 : $3 last;
if ( ! -e $request_filename ) {
return 404;
}
}
location ~* \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root $fastcgi_script_name ;
include fastcgi_params;
}
}