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 地址重写功能配置与实现

拓扑图:

Nginx地址重写功能_centos

推荐步骤:

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 系统盘

Nginx地址重写功能_Nginx_02

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)切换到云计算光盘

Nginx地址重写功能_centos_03

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;

}

}

}

Nginx地址重写功能_nginx_04

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

4、在 Centos2 上安装 DNS 服务,创建解析域名 ​​www.huyan.com​​​ 和www.huyan.com.en 以及 ​​www.huyan.cn​

1)挂载 Centos7 系统光盘

Nginx地址重写功能_nginx_05

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 服务器

Nginx地址重写功能_地址重写_06

7)客户端访问

Nginx地址重写功能_centos_07

二 、 配 置 网 站 跳 转 用 使 用 if 和 和 set 判 断 , 判 断 用 户 输 入 域 名​​http://www.huyan.com/cn​​​ 跳转到 ​​http://www.huyan.com.cn​​​ ,判断用户输入域名 ​​http://www.huyan.com/en​​​ 跳转到英文网站 ​​http://www.huyan.com.en​

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)客户端访问中文网站

Nginx地址重写功能_Nginx_08

2)客户端访问英文网站

Nginx地址重写功能_centos_09

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 }

Nginx地址重写功能_nginx_10

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)访问中文网站

Nginx地址重写功能_nginx_11

4)访问英文网站

Nginx地址重写功能_centos_12

三、return 当用输入 ​​http://www.huyan.com​​​. cn 给用户提示 404 错误 , 实现当用户输入 www.huyan.com.en 跳转到指定域名 ​​www.huyan.com​​ 的网站

1、通过 return 当用输入 ​​http://www.huyan.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.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 错误

Nginx地址重写功能_地址重写_13

2、通过 return 实现当用户输入 ​​http://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.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​​ 网站

Nginx地址重写功能_Nginx_14

Nginx地址重写功能_centos_15

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)验证

Nginx地址重写功能_centos_16

四、永久重定向应用,当用户输入域名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访问报错​

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 永久重定向

Nginx地址重写功能_地址重写_17

Nginx地址重写功能_地址重写_18

2 、 临 时 重定向应用 ,当 用 户 输 入域 ​​名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.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 临时重定向

Nginx地址重写功能_centos_19

Nginx地址重写功能_地址重写_20

3、​​laset的应用当用户输入访问www.huyan.com.cn跳转到www.huyan.com​

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​​ 域名

Nginx地址重写功能_Nginx_21

Nginx地址重写功能_centos_22

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 主访问提示错误

Nginx地址重写功能_Nginx_23

4)是 192.168.100.30 访问显示主页

Nginx地址重写功能_地址重写_24

Created By Henry 共同学习 共同进步. 点赞收藏加关注.