nginx 多域名访问多端口应用
对于个人用户来说,我们一般手上只有一个服务器,但是我们希望在上面部署多个 web 应用。这些不同的应用会占用不同的端口。如果我们不设置 nginx 的话访问方式就是下面这样,靠端口访问十分不方便。
服务 | 端口 | 访问方式 |
---|---|---|
网盘 | 2222 | www.domain.com:2222 |
博客 | 3333 | www.domian.com:3333 |
我们希望的访问的方式是,我们用不同的域名就能够访问不同端口的 web 应用,本文就记录配置方式。
服务 | 端口 | 访问方式 |
---|---|---|
网盘 | 2222 | netdisk.domain.com |
博客 | 3333 | blog.domian.com |
这就依靠 nginx 的反向代理功能,即把不同端口的服务反向代理到一个端口,这样我们虽然都是访问了 80 端口,但是由于使用的域名不同,nginx 会代理给我们不同的服务。
nginx 文件结构
我们首先要了解 nginx 的配置文件的结构,才知道我们要对哪里动刀。一般情况下 nginx 默认安装在/etc/nginx
。和今天任务有关的文件树如下:
/etc/nginx
├── nginx.conf # nginx 总配置文件
└── conf.d # 服务配置文件夹
├── default.conf # 默认服务配置 - 80 端口
├── *.conf # 自定义的服务配置文件
首先我们要保证/etc/nginx/nginx.conf
总配置文件内有这个语句:include /etc/nginx/conf.d/*.conf;
,一般在文件末尾,这句话的意思就是,nginx 启动时会把/etc/nginx/conf.d/
文件夹里所有的.conf
配置文件都载入。一般情况下这个语句都是包含的。
接下来就是要编写自定义的配置文件,编写方式有两种:
1. 在default.conf
一个文件里,通过添加配置来部署所有的服务。
2. 不同的域名(服务)编写不同的.conf
文件。
本文推荐第二种,因为后期服务管理起来更方便,喜欢一个文件解决的只需要把单独文件的内容拼接在default.conf
后面就行了。
多域名-多端口配置文件
首先我们要把多个域名都先指向我们的服务器,笔记:域名获取 · 解析至公网服务器。然后为了实现上面表格中的访问方式,我们把文件树配置成这样:
/etc/nginx
├── nginx.conf
└── conf.d
├── default.conf # 一般建议配置文件用域名来命名
├── netdisk_admin_com.conf # 网盘服务配置文件
├── blog_admin_com.conf # 博客服务配置文件
具体的文件配置如下:
netdisk_admin_com.conf
server{
listen 80; # http默认端口
server_name netdisk.domain.com; # 访问的域名
location / {
## 一些其余配置
proxy_pass http://localhost:2222; #核心语句:把2222端口上的网盘服务代理到80端口
}
##### 一些其余配置
}
blog_admin_com.conf
server{
listen 80; # http默认端口
server_name blog.domain.com; # 访问的域名
location / {
## 一些其余配置
proxy_pass http://localhost:3333; #核心语句:把3333端口上的网盘服务代理到80端口
}
##### 一些其余配置
}
之后重启 nginx 服务就好了。
禁止ip访问
有时候不希望他人可以通过 IP 直接访问到我们的服务器(一般是恶意攻击),我们可以在总配置文件/etc/nginx/nginx.conf
中添加语句
server {
listen 80 default; # default参数表示这个是默认虚拟主机
return 403;
}
也可以把这些流量导入到自己的网站,做下面的跳转操作:
server {
listen 80 default;
rewrite ^(.*) http://www.domain.com permanent;
}
设置404页面
server{
listen 80;
server_name www.domain.com;
error_page 404 /404.html;
}