虚拟主机
目前除了大型网站是独占ECS之外(其实多数企业已微服务容器化、Serverless等..)为了提高服务器的利用率,都会在一台服务器上运行多个项目,但项目如何配置在Nginx上面可以同时运行呢? 以下分享如何实现这个功能。
功能配置
为了演示,提前将修改域名的解析记录到ECS上。
然后在/data/webroot/project1 & project2 分别建立一个默认页
mkdir -p /data/webroot/project1mkdir -p /data/webroot/project2echo "HelloWorld! This is Project1" > /data/webroot/project1/index.htmlecho "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配置出错时可以很快排查到哪一个站点哪一个配置的问题。而且对于脚本去生成配置到文件夹中很简便。