在一台服务器上使用Nginx转发来部署多子域名下的web服务

在单台服务器上部署多个web服务,或许有多种解决方案,其中今天接触到使用 Nginx 的转发功能来实现,所以总结一下实现的过程

概述

相信很多拥有单台云服务器的小伙伴都有这样一个困扰:我只有一台物理机,http 协议的默认 80 端口也只有一个,如果想要部署多个 web 服务最简单的就是以端口号区分。然而这样当访问起来的时候就显得特别不够优雅,比如我有个主域名:barryliu1995.studio,有一个二级域名funhouse.barryliu1995.studio 解析的 IP 地址为我手上唯一一台物理机的 IP 地址。这样访问该服务器上的各个web服务都需要加个端口号:funhouse.barryliu1995.studio:8200、funhouse.barryliu1995.studio:4200 ……

这时我们就可以使用 Nginx 转发功能来部署多个 web 服务,摒弃上面用端口号来区分不同 web服务的方法。大致如下图所示。

大致原理

下面我以我的个人案例讲述使用过程。其中 resume.barryliu1995.studio 指向我的个人简历web服务,这只是一个静态页面而已,简历内容大家忽略,毕竟前端渣渣,还需成长,没什么拿得出手的东西。而 funhouse.barryliu1995.studio 指向我的一个简单的 web 全栈项目,今年六月份弄得。目前准备用angular重写前端页面,相对应对后端进行功能扩展。后端目前已被我下线,所以该页面只有个页面,没有后端,能看不能用。

配置过程

第一步:要有 Nginx 环境

首先废话的是你的机子要有 Nginx,各 Linux 发行版本的安装方式不太一样,这里就不赘述。如果幸运的你跟我一样使用的是 CentOS 7.0+ 的话,可以参考这篇简短的 Nginx 入门教程 - 一个前端必会的 Nginx免费教程 |技术胖

第二步:域名解析配置

然后你还需要个域名。有了之后去域名管理商那里添加对应配置记录。以我个人为例,我的 barryliu1995.studio 是在阿里云买的,因此进入对应阿里云域名的管理页面即可。然后点击添加记录,并相对应填入两个子域名 resume.barryliu1995.studiofunhouse.barryliu1995.studio 解析记录。注意这个子域名的解析记录的记录值都是云主机的公网 IP。

添加结果如下所示:

结果

填写记录:

解析记录填写

第三步:Nginx 配置

这里以 resume.barryliu1995.studio web 服务为例。首先我们现在nginx的配置目录下新增 resume.conf文件,该文件负责 web 服务。resume.conf配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
server {
listen 4200;
server_name localhost;

#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;

location / {
root /usr/share/nginx/html/resume;
index index.html index.htm;
}

#error_page 404 /404.html;

# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}

# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}

# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}

在相同目录下新增一个 resume_forward.conf 配置文件,该文件负责 resume.barryliu1995.studio 的转发工作,具体配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
server{
server_name resume.barryliu1995.studio;
listen 80;
location / {
# proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://127.0.0.1:4200$request_uri; #这里的端口号要跟对应的web服务相同
proxy_redirect off;
}
}

第四步:重启 Nginx

由于更新了 Nginx 配置文件,所以需要重启一下。

第五步:验证效果

这里就可以直接在浏览器试试效果啦

总结

该文只是一个简单的教你如何在单台物理机上部署多子域名下的 web 服务,关于详细的 Nginx 配置原理各位请自行查找相关资料,毕竟我也是刚学 Nginx。如果连 Nginx 都不知道是什么以及还没有实践过的童鞋,可以去看看文章中提到的 Nginx 入门教程,如果是大佬的话,有空的话看看该文,也就当赐教菜鸟,可以针对本文出现的知识性错误提出修改意见。

最后本文参考于使用nginx来为你在一台服务器部署多个Web Server

Donate comment here