Nginx地址重写功能
Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。那么下面就由和大家讲一讲关于nginx的优点有哪些?
一、可以高并发连接
官方测试Nginx能够支撑5万并发连接,实际生产环境中可以支撑2~4万并发连接数。
原因,主要是Nginx使用了最新的epoll(Linux2.6内核)和kqueue(freeBSD)网路I/O模型,而Apache使用的是传统的Select模型,其比较稳定的Prefork模式为多进程模式,需要经常派生子进程,所以消耗的CPU等服务器资源,要比Nginx高很多。
二、内存消耗少
Nginx+PHP(FastCGI)服务器,在3万并发连接下,开启10个Nginx进程消耗150MB内存,15MB*10=150MB,开启的64个PHP-CGI进程消耗1280内存,20MB*64=1280MB,加上系统自身消耗的内存,总共消耗不到2GB的内存。
如果服务器的内存比较小,完全可以只开启25个PHP-CGI进程,这样PHP-CGI消耗的总内存数才500MB。
三、成本低廉
购买F5BIG-IP、NetScaler等硬件负载均衡交换机,需要十多万到几十万人民币,而Nginx为开源软件,采用的是2-clause BSD-like协议,可以免费试用,并且可用于商业用途。
BSD开源协议是一个给使用者很大自由的协议,协议指出可以自由使用、修改源代码、也可以将修改后的代码作为开源或专用软件再发布。
四、配置文件非常简单
网络和程序一样通俗易懂,即使,非专用系统管理员也能看懂。
五、支持Rewrite重写
能够根据域名、URL的不同,将http请求分到不同的后端服务器群组。
六、内置的健康检查功能
如果NginxProxy后端的某台Web服务器宕机了,不会影响前端的访问。
七、节省带宽
支持GZIP压缩,可以添加浏览器本地缓存的Header头。
八、稳定性高
用于反向代理,宕机的概率微乎其微。
九、支持热部署
Nginx支持热部署,它的自动特别容易,并且,几乎可以7天*24小时不间断的运行,即使,运行数个月也不需要重新启动,还能够在不间断服务的情况下,对软件版本进行升级。
可以看出,Nginx在反向代理、Rewrite规则、稳定性、静态文件处理,内存消耗等方面,有很强的优势,使用Nginx取代传统的Apache服务器,会得到多方面的性能提升。
Nginx 地址重写功能配置与实现
拓扑图:
推荐步骤:
1、在Cento01上安装nginx,设置网站根目录/www使用域名www.huyan.com访问,Centos02上安装DNS服务解析www.huyan.com和www.huyan.cn以及www.huyan.com.en域名
2、配置网站跳转使用if和set判断,判断用户输入域名http://www.huyan.com/cn跳转到http://www.huyan.com.cn,判断用户输入域名http://www.huyan.com/en跳转到英文网站http://www.huyan.com.en
3、return当用户输入http://www.huyan.com.cn给用户提示404错误,通过return实现当用户输入http://www.huyan.com.cn跳转到指定域名www.huyan.com的网站,匹配后通过break跳出终止地址重写
4、永久重定向应用,当用户输入域名www.huyan.cn跳转到www.huyan.com网站,临时重定向应用,当用户输入域名www.huyan.com.en跳转到www.huyan.com网站,laset的应用当用户输入访问http://www.huyan.com/cn返回中文,客户端IP地址是192.168.100.30提示访问页面,不是192.168.100.30访问报错
实验步骤:
一、在Centos01上安装Nginx,设置网站根目录/www使用域名www.huyan.com访问,Centos02上安装DNS服务解析www.huyan.com和www.huyan.com.cn以及www.huyan.com.en域名
1、在 Centos01 上安装 Nginx 依赖程序
1)切换 Centos7 系统盘
2)挂载系统光盘配置本地 yum 仓库
[root@centos01 ~]# mount /dev/cdrom /mnt/
mount: /dev/sr0 写保护,将以只读方式挂载
[root@centos01 ~]# ls /mnt/
CentOS_BuildTag EULA images LiveOS repodata RPM-GPG-KEY-CentOS-Testing-7
EFI GPL isolinux Packages RPM-GPG-KEY-CentOS-7 TRANS.TBL
[root@centos01 ~]# ls /etc/yum.repos.d/
local.repo
[root@centos01 ~]# cat /etc/yum.repos.d/local.repo
[local]
name=centos7
baseurl=file:///mnt
enabled=1
gpgcheck=0
3)安装依赖程序
[root@centos01 ~]# yum -y install pcre-devel zlib-devel
4)创建管理 Nginx 用户
[root@centos01 ~]# useradd -M -s /sbin/nologin nginx
2、配置安装 Nginx 服务
1)切换到云计算光盘
2)解压配置安装 Nginx
root@centos01 ~]# rz
z waiting to receive.**B0100000023be50
[root@centos01 ~]# tar zxf ./nginx-1.16.1.tar.gz -C /usr/src/
[root@centos01 ~]# cd /usr/src/nginx-1.16.1/
[root@centos01 nginx-1.16.1]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module
3)编译安装 Nginx
[root@centos01 nginx-1.16.1]# make && make install
4)优化 nginx 命令检查配置文件
[root@centos01 nginx-1.16.1]# ln -s /usr/local/nginx/sbin/* /usr/local/sbin/
[root@centos01 nginx-1.16.1]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: [emerg] getpwnam("nginx") failed
nginx: configuration file /usr/local/nginx/conf/nginx.conf test failed
3、设置 Nginx 服务器网站根目录设置主页修改配置文件
1)创建网站根目录设置主页
[root@centos01 ~]# mkdir /www
mkdir: 无法创建目录"/www": 文件已存在
[root@centos01 ~]# echo "www.huyan.com" > /www/index.html
2)修改 Nginx 主配置文件
[root@centos01 ~]# cp /usr/local/nginx/conf/nginx.conf /usr/local/nginx/conf/nginx.conf.bak
[root@centos01 ~]# vim /usr/local/nginx/conf/nginx.conf
user nginx;
worker_processes 1;
pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name www.huyan.com;
charset utf-8;
access_log logs/www.huyan.com.access.log;
location / {
root /www;
index index.html index.htm;
}
}
}
3)启动 Nginx 服务监听端口号
[root@centos01 ~]# nginx
[root@centos01 ~]# netstat -anptu | grep nginx
tcp 0 0 192.168.100.10:80 0.0.0.0:* LISTEN 4171/nginx: master
1)挂载 Centos7 系统光盘
2)挂载系统关盘安装 DNS 服务
[root@centos02 ~]# mount /dev/cdrom /mnt/
mount: /dev/sr0 写保护,将以只读方式挂载
[root@centos02 ~]# ls /mnt/
CentOS_BuildTag EULA images LiveOS repodata RPM-GPG-KEY-CentOS-Testing-7
EFI GPL isolinux Packages RPM-GPG-KEY-CentOS-7 TRANS.TBL
[root@centos02 ~]# rpm -ivh /mnt/Packages/bind-9.9.4-50.el7.x86_64.rpm
警告:/mnt/Packages/bind-9.9.4-50.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
准备中... ################################# [100%]
正在升级/安装...
1:bind-32:9.9.4-50.el7 ################################# [100%]
[root@centos02 ~]# rpm -ivh /mnt/Packages/bind-chroot-9.9.4-50.el7.x86_64.rpm
警告:/mnt/Packages/bind-chroot-9.9.4-50.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
准备中... ################################# [100%]
正在升级/安装...
1:bind-chroot-32:9.9.4-50.el7 ################################# [100%]
3)修改 DNS 服务器主配置文件
[root@centos02 ~]# vim /etc/named.conf
options {
listen-on port 53 { 192.168.100.20; };
directory "/var/named/";
};
zone "huyan.com" IN {
options {
listen-on port 53 { 192.168.100.20; };
directory "/var/named/";
};
zone "huyan.com" IN {
type master;
file "/var/named/huyan.com.zone";
};
zone "huyan.com.cn" IN {
type master;
file "/var/named/huyan.com.cn.zone";
};
zone "huyan.com.en" IN {
type master;
file "/var/named/huyan.com.en.zone";
};
[root@centos02 ~]# named-checkconf /etc/named.conf
4)修改 DNS 区域配置文件
[root@centos02 ~]# vim /var/named/huyan.com.zone
$TTL 86400
@ SOA huyan.com. root.huyan.com.(
2023021210
1H
15M
1W
1D
)
@ NS centos02.huyan.com.
centos02 A 192.168.100.20
www A 192.168.100.10
[root@centos02 ~]# named-checkzone huyan.com /var/named/huyan.com.zone
zone huyan.com/IN: loaded serial 2023021210
OK
[root@centos02 ~]# vim /var/named/huyan.com.cn.zone
$TTL 86400
@ SOA huyan.com.cn. root.huyan.com.cn.(
2023021210
1H
15M
1W
1D
)
@ NS centos02.huyan.com.cn.
centos02 A 192.168.100.20
www A 192.168.100.10
[root@centos02 ~]# named-checkzone huyan.com.cn /var/named/huyan.com.cn.zone
zone huyan.com.cn/IN: loaded serial 2023021210
OK
[root@centos02 ~]# vim /var/named/huyan.com.en.zone
$TTL 86400
@ SOA huyan.com.en. root.huyan.com.en.(
2023021210
1H
15M
1W
1D
)
@ NS centos02.huyan.com.en.
centos02 A 192.168.100.20
www A 192.168.100.10
[root@centos02 ~]# named-checkzone huyan.com.en /var/named/huyan.com.en.zone
zone huyan.com.en/IN: loaded serial 2023021210
OK
5)启动 DNS 服务器设置开机自动启动
[root@centos02 ~]# systemctl start named
[root@centos02 ~]# systemctl enable named
Created symlink from /etc/systemd/system/multi-user.target.wants/named.service to /usr/lib/systemd/system/named.service.
6)客户端测试 DNS 服务器
7)客户端访问
1、创建中文网站和英文网站设置主页
1)设置中文网站根目录
[root@centos01 ~]# mkdir /www/cn
[root@centos01 ~]# echo "cn" > /www/cn/index.html
2)设置英文网站根目录
[root@centos01 ~]# mkdir /www/en
[root@centos01 ~]# echo "en" > /www/en/index.html
3)列出网站根目录数据
[root@centos01 ~]# ls -R /www/
/www/:
cn en error index.html
/www/cn:
index.html
/www/en:
index.html
/www/error:
error.html
2、修改 Nginx 主配置文件当用户输入 cn 跳转中文网站输入 en 跳转到英文网站
1)修改主配置文件
[root@centos01 ~]# vim /usr/local/nginx/conf/nginx.conf
user nginx;
worker_processes 1;
pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 192.168.100.10:80;
server_name www.huyan.com;
charset utf-8;
access_log logs/www.huyan.com.access.log;
location / {
root /www;
index index.html index.htm;
}
}
server {
listen 192.168.100.10:80;
server_name www.huyan.com.cn;
charset utf-8;
access_log logs/www.huyan.com.access.log;
location / {
set $language 'cn';
rewrite ^/$ http://www.huyan.com/$language;
}
}
server {
listen 192.168.100.10:80;
server_name www.huyan.com.en;
charset utf-8;
access_log logs/www.huyan.com.access.log;
location / {
set $language 'en';
rewrite ^/$ http://www.huyan.com/$language;
}
}
}
2)重新启动 Nginx 服务
[root@centos01 ~]# killall nginx
[root@centos01 ~]# killall nginx
nginx: no process found
[root@centos01 ~]# nginx
[root@centos01 ~]# netstat -anptu | grep nginx
tcp 0 0 192.168.100.10:80 0.0.0.0:* LISTEN 4993/nginx: master
3、客户端验证访问
1)客户端访问中文网站
2)客户端访问英文网站
4、优化网站跳转
1)修改 Nginx 主配置文件
[root@centos01 ~]# vim /usr/local/nginx/conf/nginx.conf
22 server {
23 listen 192.168.100.10:80;
24 server_name www.huyan.com.cn;
25 charset utf-8;
26 access_log logs/www.huyan.com.access.log;
27 location / {
28 if ($http_host ~ (cn)$) {
29 set $language 'cn';
30 rewrite ^/$ http://www.huyan.com/$language;
31 }
32 if ($http_host ~ (cn)$) {
33 set $language 'cn';
34 rewrite ^/$ http://www.huyan.com/$language;
35 }
36 }
37 }
38 server {
39 listen 192.168.100.10:80;
40 server_name www.huyan.com.en;
41 charset utf-8;
42 access_log logs/www.huyan.com.access.log;
43 location / {
44 set $language 'en';
45 rewrite ^/$ http://www.huyan.com/$language;
46 }
47 }
48 }
2)重启 Nginx 服务
[root@centos01 ~]# killall nginx
[root@centos01 ~]# killall nginx
nginx: no process found
[root@centos01 ~]# nginx
[root@centos01 ~]# netstat -anptu | grep nginx
tcp 0 0 192.168.100.10:80 0.0.0.0:* LISTEN 5127/nginx: master
3)访问中文网站
4)访问英文网站
三、return 当用输入 http://www.huyan.com. cn 给用户提示 404 错误 , 实现当用户输入 www.huyan.com.en 跳转到指定域名 www.huyan.com 的网站
1)修改 Nginx 主配置文件
[root@centos01 ~]# vim /usr/local/nginx/conf/nginx.conf
server {
listen 192.168.100.10:80;
server_name www.huyan.com.cn;
charset utf-8;
access_log logs/www.huyan.com.access.log;
location / {
if ($http_host = "www.huyan.com.cn") {
return 404;
}
}
[root@centos01 ~]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
2)重新启动 Nginx
[root@centos01 ~]# killall nginx
[root@centos01 ~]# killall nginx
nginx: no process found
[root@centos01 ~]# nginx
3)客户端访问 www.bdqn.com.cn 返回 404 错误
1)修改 Nginx 主配置文件
[root@centos01 ~]# vim /usr/local/nginx/conf/nginx.conf
server {
listen 192.168.100.10:80;
server_name www.huyan.com.en;
charset utf-8;
access_log logs/www.huyan.com.access.log;
location / {
if ($http_host = "www.huyan.com.en") {
rewrite ^/$ http://www.huyan.com;
}
}
[root@centos01 ~]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
2)重新启动 Nginx 服务
[root@centos01 ~]# killall nginx
[root@centos01 ~]# killall nginx
nginx: no process found
[root@centos01 ~]# nginx
[root@centos01 ~]# netstat -anptu | grep nginx
tcp 0 0 192.168.100.10:80 0.0.0.0:* LISTEN 5246/nginx: master
3)输入域名跳转 www.huyan.com 网站
3、当用户输入 www.huyan.com.en 配后通过 break 跳出终止地址重写
1)修改 Nginz 主配置文件
[root@centos01 ~]# vim /usr/local/nginx/conf/nginx.conf
server {
listen 192.168.100.10:80;
server_name www.huyan.com.en;
charset utf-8;
access_log logs/www.huyan.com.access.log;
location / {
if ($http_host = "www.huyan.com.en") {
break;
rewrite ^/$ http://www.huyan.com;
}
}
[root@centos01 ~]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
3)重新启动 Nginx
[root@centos01 ~]# killall nginx
[root@centos01 ~]# killall nginx
nginx: no process found
[root@centos01 ~]# nginx
4)验证
1、永久重定向应用,当用户输入域名www.huyan.com.cn或者www.huyan.com.en跳转到www.huyan.com网站
1)修改 Nginx 主配置文件
[root@centos01 ~]# vim /usr/local/nginx/conf/nginx.conf
server {
listen 192.168.100.10:80;
server_name www.huyan.com.cn;
charset utf-8;
access_log logs/www.huyan.com.access.log;
location / {
rewrite ^/$ http://www.huyan.com permanent;
}
}
[root@centos01 ~]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
2)重新启动服务
[root@centos01 ~]# killall nginx
[root@centos01 ~]# killall nginx
nginx: no process found
[root@centos01 ~]# nginx
3)验证 301 永久重定向
1)修改 Nginx 主配置文件
[root@centos01 ~]# vim /usr/local/nginx/conf/nginx.conf
server {
listen 192.168.100.10:80;
server_name www.huyan.com.en;
charset utf-8;
access_log logs/www.huyan.com.access.log;
location / {
rewrite ^/$ http://www.huyan.com redirect;
}
}
[root@centos01 ~]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
2)重新启动 Nginx 服务
[root@centos01 ~]# killall nginx
[root@centos01 ~]# killall nginx
nginx: no process found
[root@centos01 ~]# nginx
3)验证 302 临时重定向
1)修改 Nginx 主配置文件
[root@centos01 ~]# vim /usr/local/nginx/conf/nginx.conf
server {
listen 80;
server_name www.bdqn.com.cn;
charset utf-8;
access_log logs/www.bdqn.com.access.log;
location / {
if ($http_host ~* (cn)$){
rewrite ^/$ http://www.bdqn.com last;
}
}
}
server {
listen 192.168.100.10:80;
server_name www.huyan.com.en;
charset utf-8;
access_log logs/www.huyan.com.access.log;
location /en {
root /www/en/;
index index.html index.htm;
}
}
}
[root@centos01 ~]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
2)重新启动 Nginx
[root@centos01 ~]# killall nginx
[root@centos01 ~]# killall nginx
nginx: no process found
[root@centos01 ~]# nginx
3) 客户端访问验证客户端输入域名是 www.huyan.com.cn 跳转到 www.huyan.com 域名
4、维护网页跳转,当客户端时测试机 192.168.100.30 显示页面,非192.168.100.30 主机访问报错误
1)修改 Nginx 主配置文件
[root@centos01 ~]# vim /usr/local/nginx/conf/nginx.conf
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 192.168.100.10:80;
server_name www.huyan.com;
charset utf-8;
access_log logs/www.huyan.com.access.log;
location / {
root /www;
index index.html index.htm;
set $rewrite true;
if ($remote_addr = "192.168.100.30") {
set $rewrite fales;
}
if ($rewrite = true) {
rewrite (.+) /error.html;
}
location = /error.html {
root /www/error/;
}
}
}
}
[root@centos01 ~]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
3)非 192.168.100.30 主访问提示错误
4)是 192.168.100.30 访问显示主页
Created By Henry 共同学习 共同进步. 点赞收藏加关注.