草庐IT

一步一步教你Nginx地址重写

邂逅云边的落日 2023-03-28 原文

Nginx地址重写

一、在 Centos01 上安装安装 Nginx,设置网站根目录/www 使用域名 www.stz.com 访问,Cent02 上安装 DNS 服务解析 www.stz.com 和 www.stz.com.cn 以及 www.stz.com.en 域名

1、在Centos01上安装nginx依赖

1)挂载系统光盘配置本地yum仓库

[root@centos01 ~]# mount /dev/cdrom /mnt/
mount: /dev/sr0 写保护,将以只读方式挂载
[root@centos01 ~]# rm -rf /etc/yum.repos.d/CentOS-*
2)安装依赖程序

[root@centos01 ~]# yum -y install pcre-devel zlib-devel
3)创建管理Nginx用户

[root@centos01 ~]# useradd -M -s /sbin/nologin nginx
[root@centos01 ~]# umount /mnt/

2、配置安装nginx服务

1)切换光盘

2)挂载光盘解压配置nginx

[root@centos01 ~]# mount /dev/cdrom /mnt/
mount: /dev/sr0 写保护,将以只读方式挂载
[root@centos01 ~]# tar zxf /mnt/nginx-1.6.0.tar.gz -C /usr/src/
[root@centos01 src]# cd /usr/src/nginx-1.6.0/
[root@centos01 src]# ./configure \
> --prefix=/usr/local/nginx \
> --user=nginx \
> --group=nginx \
> --with-http_stub_status_module
3)编译安装

[root@centos01 nginx-1.6.0]# make && make install
4)优化nginx命令检查配置文件

[root@centos01 ~]# ln -s /usr/local/nginx/sbin/* /usr/local/sbin/
[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服务器网站根目录设置主页修改配置文件

1)创建网站根目录设置主页

[root@centos01 ~]# mkdir /www
[root@centos01 ~]# echo "www.stz.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;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name www.stz.com;
charset utf-8;
access_log logs/www.stz.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 0.0.0.0:80 0.0.0.0:* LISTEN 3763/nginx: master

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

1)挂载光盘安装DNS服务

[root@centos02 ~]# mount /dev/cdrom /mnt/
mount: /dev/sr0 写保护,将以只读方式挂载
[root@centos02 ~]# rpm -ivh /mnt/Packages/bind-9.9.4-50.el7.x86_64.rpm
[root@centos02 ~]# rpm -ivh /mnt/Packages/bind-chroot-9.9.4-50.el7.x86_64.rpm
2)修改DNS服务主配置文件

[root@centos02 ~]# vim /etc/named.conf
options {
listen-on port 53 { 192.168.100.20; };
directory "/var/named";
};
zone "stz.com" IN {
type master;
file "/var/named/stz.com.zone";
};
zone "stz.com.cn" IN {
type master;
file "/var/named/stz.com.cn.zone";
};
zone "stz.com.en" IN {
type master;
file "/var/named/stz.com.en.zone";
};
[root@centos02 ~]# named-checkconf /etc/named.conf
4)修改DNS区域配置文件

[root@centos02 ~]# vim/var/named/stz.com.zone
$TTL 86400
@ SOA stz.com. root.stz.com. (
2023022312
1H
15M
1W
1D
)
@ NS centos02.stz.com.
centos02 A 192.168.100.20
www A 192.168.100.10
[root@centos02 ~]# named-checkzone stz.com /var/named/stz.com.zone
zone stz.com/IN: loaded serial 2023022312 OK
[root@centos02 ~]# vim/var/named/stz.com.cn.zone
$TTL 86400
@ SOA stz.com.cn. root.stz.com.cn. (
2023022312
1H
15M
1W
1D
)
@ NS centos02.stz.com.cn.
centos02 A 192.168.100.20
www A 192.168.100.10
[root@centos02 ~]# named-checkzone stz.com.cn /var/named/stz.com.cn.zone
zone stz.com.cn/IN: loaded serial 2023022312 OK
[root@centos02 ~]# vim /var/named/stz.com.en.zone
$TTL 86400
@ SOA stz.com.en. root.stz.com.en. (
2023022312
1H
15M
1W
1D
)
@ NS centos02.stz.com.en.
centos02 A 192.168.100.20
www A 192.168.100.10
[root@centos02 ~]# named-checkzone stz.com.en /var/named/stz.com.en.zone
zone stz.com.en/IN: loaded serial 2023022312
OK
5)启动DNS服务开机自动启动

[root@centos02 ~]# systemctl start named
[root@centos02 ~]# systemctl enable named
6)客户端测试DNS服务器

配置ip

7)客户端访问

二、配置网站跳转使用if和set判断,判断用户输入域名http://www.stz.com/cn跳转到http://www.stz.com.cn,判断用户输入域名http://www.stz.com/en跳转到英文网站http://www.stz.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 index.html

/www/cn:
index.html

/www/en:
index.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;
charset utf-8;
access_log logs/www.stz.com.access.log;
location / {
root /www;
index index.html index.htm;
}
}
server {
listen 80;
server_name www.stz.com.cn;
charset utf-8;

root /www;
index index.html index.htm;
}
}
server {
listen 80;
server_name www.stz.com.cn;
charset utf-8;
access_log logs/www.stz.com.access.log;
location / {
set $language 'cn';
rewrite ^/$ http://www.stz.com/$language;
}
}
server {
listen 80;
server_name www.stz.com.en;
charset utf-8;
access_log logs/www.stz.com.access.log;

location / {
set $language 'en';
rewrite ^/$ http://www.stz.com/$language;
}
}
}
2)重新启动nginx服务

[root@centos01 ~]# killall -I -QUIT nginx
[root@centos01 ~]# nginx

3、客户端验证访问

1)客户端访问中文网站

2)客户端访问英文网站

4、优化网站跳转

1)修改nginx主配置文件

[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.stz.com;
charset utf-8;
access_log logs/www.stz.com.access.log;
location / {
root /www;
index index.html index.htm;
}
}

server {
listen 80;
server_name www.stz.com.cn www.stz.com.en;
charset utf-8;

location / {
if ($http_host ~ (cn)$) {
set $language 'cn';
rewrite ^/$ http://www.stz.com/$language;
}
if ($http_host ~ (en)$) {
set $language 'en';
rewrite ^/$ http://www.stz.com/$language;
}
}
}
}
2)重启Nginx服务

[root@centos01 ~]# killall -I -QUIT nginx
[root@centos01 ~]# nginx
3)访问中文网站

4)访问英文网站

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

1、通过return当用输入http://www.stz.com.cn给用户提示404错误

1)修改nginx主配置文件

[root@centos01 ~]# vim /usr/local/nginx/conf/nginx.conf
user nginx;
worker_connections 1024;
}
http {
include mime.types;
sendfile on;
keepalive_timeout 65;
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.stz.com;
charset utf-8;
access_log logs/www.stz.com.access.log;
location / {
root /www;
index index.html index.htm;
}
}
server {
listen 192.168.100.10:80;
server_name www.stz.com.cn;
charset utf-8;

location / {
if ($http_host = "www.stz.com.cn") {
return 404;
}
}
}
}
2)重新启动Nginx

[root@centos01 ~]# killall -I -QUIT nginx
[root@centos01 ~]# nginx
3)客户端访问www.stz.com.cn返回404错误

2、通过return实现当用户输入http://www.stz.com.en跳转到指定域名www.stz.com的网站

1)修改nginx主配置文件

[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.stz.com;
charset utf-8;
access_log logs/www.stz.com.access.log;
location / {
root /www;
index index.html index.htm;
}
}
server {
listen 192.168.100.10:80;
server_name www.stz.com.en;
charset utf-8;

location / {
if ($http_host = "www.stz.com.en") {
rewrite ^/$ http://www.stz.com;
}
}
}
}
2)重新启动nginx

[root@centos01 ~]# killall -I -QUIT nginx
[root@centos01 ~]# nginx
3)输入域名跳转www.stz.com网站

3、当用户输入www.stz.com.en后通过break跳出终止地址重写

1)修改nginx主配置文件

[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.stz.com;
charset utf-8;
access_log logs/www.stz.com.access.log;
location / {
root /www;
index index.html index.htm;
}
}
server {
listen 192.168.100.10:80;
server_name www.stz.com.cn;
charset utf-8;
access_log logs/www.stz.com.access.log;
location / {
if ($http_host = "www.stz.com.cn") {
return 404;
}
}
}
server {
listen 192.168.100.10:80;
server_name www.stz.com.en;
charset utf-8;
location / {
if ($http_host = "www.stz.com.en") {
break;
rewrite ^/$ http://www.stz.com;
}
}
}
}
4)客户端验证

四、永久重定向应用,当用户输入域名www.stz.com.cn跳转到www.stz.com网站,临时重定向应用,当用户输入域名 www.bdqn.com.en 跳 转 到 www.stz.com 网站, laset 的 应 用 当 用 户 输 入 访 问 http://www.stz.com/cn 返回中文,客户端 IP 地址是 192.168.100.50 提示访 问页面,不是 192.168.100.50 访问报错

1、永久重定向应用,当用户输入域名www.stz.com.cn或者www.stz.com.en跳转到www.stz.com网站

1)修改Nginx主配置文件

[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.stz.com;
charset utf-8;
access_log logs/www.stz.com.access.log;
location / {
root /www;
index index.html index.htm;
}
}
server {
listen 80;
server_name www.stz.com.cn;
charset utf-8;
access_log logs/www.stz.com.access.log;
location / {
rewrite ^/$ http://www.stz.com permanent;
}
}
}
2)重新启动服务

[root@centos01 ~]# killall -I -QUIT nginx
[root@centos01 ~]# nginx
3)验证301永久重定向

2、临时重定向应用,当用户输入域名www.stz.com.cn或者www.stz.com.en跳转到www.stz.com网站

1)修改nginx主配置文件

[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.stz.com;
charset utf-8;
access_log logs/www.stz.com.access.log;
location / {
root /www;
index index.html index.htm;
}
}
server {
listen 80;
server_name www.stz.com.en;
charset utf-8;
access_log logs/www.stz.com.access.log;
location / {
rewrite ^/$ http://www.stz.com redirect;
}
}
}
2)重新启动

[root@centos01 ~]# killall -I -QUIT nginx
[root@centos01 ~]# nginx
3)客户端验证

3、laset的应用当用户输入访问www.stz.com.cn 跳转到www.stz.com,当用户输入www.stz.com.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 80;
server_name www.stz.com;
charset utf-8;
access_log logs/www.stz.com.access.log;
location / {
root /www;
index index.html index.htm;
}
}
server {
listen 80;
server_name www.stz.com.cn;
charset utf-8;
access_log logs/www.stz.com.access.log;
location / {
if ($http_host ~* (cn)$) {
rewrite ^/$ http://www.stz.com last;
}
location /en {
root /www/en/;
index index.html index.htm;
}
}
}
}
2)重新启动nginx

[root@centos01 ~]# killall -I -QUIT nginx
nginx: no process found
[root@centos01 ~]# nginx
3)客户端访问验证客户端输入的域名是www.bdqn.com.cn跳转到www.stz.com域名

 

4)输入www.stz.com.cn/en跳到英文网站

4、维护网页跳转,当客户端是测试机192.168.100.50显示页面,非192.168.100.50主机访问报错

1)修改Nginx主配置文件

[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.stz.com;
charset utf-8;
access_log logs/www.stz.com.access.log;
location / {
root /www/;
index index.html index.htm;
set $rewrite true;
if ($remote_addr = "192.168.100.50") {
set $rewrite fales;
}
if ($rewrite = true) {
rewrite (.+) /index.html;
}
location = /index.html {
root /www/error/;
}
}
}
}
3)重新启动

[root@centos01 ~]# killall -I -QUIT nginx
nginx: no process found
[root@centos01 ~]# nginx
3)非192.168.100.50主访问提示错误

4)是192.168.100.50访问正常

有关一步一步教你Nginx地址重写的更多相关文章

  1. ruby-on-rails - 如何优雅地重启 thin + nginx? - 2

    我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server

  2. ruby - 从 Ruby 中的主机名获取 IP 地址 - 2

    我有一个存储主机名的Ruby数组server_names。如果我打印出来,它看起来像这样:["hostname.abc.com","hostname2.abc.com","hostname3.abc.com"]相当标准。我想要做的是获取这些服务器的IP(可能将它们存储在另一个变量中)。看起来IPSocket类可以做到这一点,但我不确定如何使用IPSocket类遍历它。如果它只是尝试像这样打印出IP:server_names.eachdo|name|IPSocket::getaddress(name)pnameend它提示我没有提供服务器名称。这是语法问题还是我没有正确使用类?输出:ge

  3. ruby-on-rails - 如何用不同的用户运行nginx主进程 - 2

    A/ctohttp://wiki.nginx.org/CoreModule#usermaster进程曾经以root用户运行,是否可以以不同的用户运行nginxmaster进程? 最佳答案 只需以非root身份运行init脚本(即/etc/init.d/nginxstart),就可以用不同的用户运行nginxmaster进程。如果这真的是你想要做的,你将需要确保日志和pid目录(通常是/var/log/nginx&/var/run/nginx.pid)对该用户是可写的,并且您所有的listen调用都是针对大于1024的端口(因为绑定(

  4. ruby-on-rails - 验证电子邮件地址是 Paypal 用户 - 2

    我想验证一个电子邮件地址是否是PayPal用户。是否有API调用来执行此操作?是否有执行此操作的ruby​​库?谢谢 最佳答案 GetVerifiedStatus来自PayPal'sAdaptiveAccounts平台会为您做这件事。PayPal没有任何codesamples或SDKs用于Ruby中的自适应帐户,但我确实找到了编写codeforGetVerifiedStatusinRuby的人.您需要更改该代码以检查他们拥有的帐户类型的唯一更改是更改if@xml['accountStatus']!=nilaccount_status

  5. ruby-on-rails - 从 Geocode 经纬度获取地址 - 2

    对于我的大部分应用程序,我从Geocoder获取城镇/城市的纬度、经度、邮政编码等。我只是投入城市和州,作为返回,我得到了我处于一个有field的场景中。该场所需要一个地址,我正在从另一个来源获取该场所的纬度和经度。使用Geocodergem,我可以通过给地址提供经纬度来获取地址吗? 最佳答案 在Rails控制台中运行。latitude=40.0397longitude=-76.30144geo_localization="#{latitude},#{longitude}"query=Geocoder.search(geo_loca

  6. ruby-on-rails - Websocket-rails 不适用于 Nginx 和 Unicorn 的生产环境 - 2

    我有带有gemwebsocket-rails0.7的Rails3.2应用程序。在开发机上,一切正常在生产环境中,我使用Nginx/1.6作为代理服务器,Unicorn作为http服务器。Thin用于独立模式(在https://github.com/websocket-rails/websocket-rails/wiki/Standalone-Server-Mode之后)。nginx配置:location/websocket{proxy_passhttp://localhost:3001/websocket;proxy_http_version1.1;proxy_set_headerUp

  7. ruby - 没有 nginx 的 Puma - 同一 IP 上的多个 ruby​​ 应用程序 :PORT - 2

    Nginx在生产中的重要性通常基于它为慢速客户端提供服务的能力;在RESTfulAPI的设置中,它似乎是生产堆栈的一个不必要的层,尤其是Puma(不像广泛使用的unicorn可以处理nginx工作)。Pumacanallowmultipleslowclientstoconnectwithoutrequiringaworkertobeblockedontherequesttransaction.Becauseofthis,Pumahandlesslowclientsgracefully.HerokurecommendsPumaforuseinscenarioswhereyouexpect

  8. ruby - 使用 ruby​​-vips 的第一步 - 2

    我正在尝试实现/转换daltonize将色盲人的图像校正为ruby的算法。在javascript中编写了两个主要的引用实现和python+我不熟悉的语言/环境中的其他实现。我几乎没有图像处理方面的经验,更不用说VIPS/ruby​​-vips了。我想知道如何迈出第一步。该文档似乎主要使用C/C++,而在ruby​​方面很少。它也非常详细。我什至不确定要使用哪些基本操作。看起来lin函数是一个很好的起点,但我不确定如何应用它。任何具有VIPS经验的人都可能在几分钟内算出整个算法。我想知道是否有人可以给我一些关于从哪里开始的指示。具体来说:如何访问单个(R/G/B)元素?是否有基于道尔顿化

  9. ruby-on-rails - Foreman无法启动Nginx,但我可以手动启动。为什么? - 2

    我目前正在运行Foreman在暂存(Ubuntu)上,一旦我开始工作,就会切换到使用upstart。我的Procfile.staging看起来像这样:nginx:sudoservicenginxstartunicorn:bundleexecunicorn-c./config/unicorn.rbredis:bundleexecredis-serversidekiq:bundleexecsidekiq-v-C./config/sidekiq.yml我可以使用以下方法成功启动nginx:$sudoservicenginxstart然而,当我运行$foremanstart时,当其他三个进程成

  10. Linux操作系统CentOS7安装Nginx[详细版] - 2

    Nginx安装1.官网下载Nginx2.使用XShell和Xftp将压缩包上传到Linux虚拟机中3.解压文件nginx-1.20.2.tar.gz4.配置nginx5.启动nginx6.拓展(修改端口和常用命令)(一)修改nginx端口(二)常用命令1.官网下载Nginxhttp://nginx.org/en/download.html这里我下载的是1.20.2版本,大家按需下载对应稳定版即可2.使用XShell和Xftp将压缩包上传到Linux虚拟机中没有XShell可以参考《Linux操作系统CentOS7连接XShell》3.解压文件nginx-1.20.2.tar.gz1)检查是否存

随机推荐