虚拟主机
目前除了大型网站是独占ECS之外(其实多数企业已微服务容器化、Serverless等..)为了提高服务器的利用率,都会在一台服务器上运行多个项目,但项目如何配置在Nginx上面可以同时运行呢? 以下分享如何实现这个功能。
功能配置
为了演示,提前将修改域名的解析记录到ECS上。
然后在/data/webroot/project1 & project2 分别建立一个默认页
mkdir -p /data/webroot/project1
mkdir -p /data/webroot/project2
echo "HelloWorld! This is Project1" > /data/webroot/project1/index.html
echo "HelloWorld! This is Project2" > /data/webroot/project2/index.html
不同端口,区分不同项目(经常用)
server {
listen 8081;
server_name project.yekangming.com;
location / {
root /data/webroot/project1;
index index.html;
}
}
server {
listen 8082;
server_name project.yekangming.com;
location / {
root /data/webroot/project2;
index index.html;
}
}
访问效果
不同域名,区分不同项目(经常用)
server {
listen 80;
server_name project1.yekangming.com;
location / {
root /data/webroot/project1;
index index.html;
}
}
server {
listen 80;
server_name project2.yekangming.com;
location / {
root /data/webroot/project2;
index index.html;
}
}
访问效果
不同IP,区分不同项目(很少用)
server {
listen 172.16.49.101:80;
server_name localhost;
location / {
root /data/webroot/project1;
index index.html;
}
}
server {
listen 172.16.49.102:80;
server_name localhost;
location / {
root /data/webroot/project2;
index index.html;
}
}
不同路径,区分不同项目(很少用)
server {
listen 80;
server_name project.yekangming.com;
location /project1 {
root /data/webroot/project1;
index index.html;
}
location /project2 {
root /data/webroot/project2;
index index.html;
}
}
配置详解
listen; #监听的端口,默认监听本地全部IP地址
server_name;#监听的域名
location; #请求的URI匹配,默认是/
root;#本地文件系统的路径
index; #默认页名称
小技巧
在维护多虚拟主机的配置时,不会将全部的站点写入同一个配置文件中,因为代码量太长维护性及可读性太差。一般会使用includebo包含另外一个配置文件夹专门用于存放虚拟主机站点的配置。配置方法很简单,在http段中加入include /usr/local/nginx/conf/extra/*.conf; 在Nginx重启时会读取这个文件夹中.conf为后缀名的配置文件。每一个站点单独维护一个配置文件,对Nginx配置出错时可以很快排查到哪一个站点哪一个配置的问题。而且对于脚本去生成配置到文件夹中很简便。