部署 很好奇各位把站点扔到哪个目录下的

yiming · 2014年06月05日 · 最后由 leopku 回复于 2014年06月10日 · 3466 次阅读

最近刚把 Rails Tutorial 走完,想体验一下在 VPS 上部署的过程,用了 Nginx。

然后看到这货有和 Apache virtual host 类似的功能 block server,于是就配了一下。一般的,我就直接这么扔了

/var/www/example.com
/var/www/test.com
/var/www/subdomain.example.com

很好奇各位习惯把各种站点放到哪个目录下呢?倘若这台 VPS 有多个用户,每个同学还有自己的站点。把这些东西放到 /home/username/ 会不会方便管理一点?其次对子域名 subdomain.example.comexample.com 这两个目录放在同级总感觉怪怪的,有从语义上来讲更加贴切,又便于管理的组织方式么?


Update:

/var/www/example.com/root  # web root for example.com
/var/www/example.com/subdomain  # web root for your subdomain

这样处理二级域名会不会好一点?

一直 ~/www

你一个 vps 能跑几个站点啊,不用搞那么多分类,直接/var/www/foo.example.com 就好了

放在/u/Apps 下面…

因为阿里云系统盘只有 20G 所以一般就买个 100G 数据盘,然后挂到 /www 然后 /www/web 放网站 /www/git 放 git 库 /www/bak 放一些乱七八糟的比如导出的 sql 之类 /www/log 放 nginx log / rails log 什么的 www/mongodb 放 mongodb 数据库

#5 楼 @o_0 靠谱,其实定期清理下 nginx 日志感觉还是有必要,20G nginx 日志往往占用一半多。

匿名 #7 2014年06月06日

/var/opt/sites/域名

public 下面是静态资源 nginx 配置了如果 tmp/sockets/web.sock 存在,则 proxy_pass 到它

大致是这样:

# server bound to unix socket: tmp/sockets/web.sock
location @server {
    error_log off;

    error_page 502 504 = @fallback;

    proxy_set_header    X-Forwarded-For   $proxy_add_x_forwarded_for;
    proxy_set_header    Host              $http_host;
    proxy_set_header    X-Forwarded-Proto $scheme;
    proxy_set_header    X-Real-IP         $remote_addr;

    proxy_redirect off;
    proxy_pass http://unix:/var/opt/sites/$http_host/tmp/sockets/web.sock;
}

location @fallback {
  return 404;
}

# web root dir: public
location / {
    root /var/opt/sites/$http_host/public;

    try_files $uri $uri/index.htm $uri/index.html @server;
}

通常这与操作系统的分割规画有关。如果整个硬盘只有一块,放何处是无所谓。讲究的分割,是会把/var,/,/home,/boot 挂在不同分割。硬盘不大时,若不分割,要是 log 塞满了/, 系统就 GG 了,而有把/var 与/挂在不同分割区;万一/var 被塞满,系统最多是无法 log,或者一些需要用到/var 空间的服务无法运作,但还是可以进系统去处理。

web 会有程式及 log,理想的作法是把 log 或会变动的暂存资料放在 /var;而程式相关文档放在其他地方。但我自己用的服务器,就我一人用,所跑的好几个 name-based hosts 都放在 /home/SITES/{site1,site2..} ,虽然用 archlinux + nginx 跑,但觉得 ubuntu 把各 virtual hosts 的各设定档放在 /etc/nginx/sites-available,再 sybol link 到 sites-enabled 这种管理方式不错,也仿此方式来设定。

如果服务器是多人使用环境,又不想一个一个设,大概可以要求各用户将其各 virtual host 放置在 ~/myhosts/host{1,2,3}.example.com/htdocs。系统管理者在/var/www 里放 /home/{user}/myhosts 的 symbol link,nginx 只要这种最懒惰的设定就可运行:

listen 80;
    server_name _;
    access_log      /var/log/nginx/$host.access_log main;
    error_log      /var/log/nginx/$host.access_log info;
    root /var/www/$host/htdocs;

用户要设几个 virtual hosts 也不用麻烦到管理者。但要管得真的没有问题,还是需要一个一个或 regular expression 的方式来设定。 在 update 所提的,可参考这种设法:

server {
    server_name ~^((?<subdomain>.*)\.)?(?<domain>[^.]+)\.(?<tld>[^.]+)$;
    if ($subdomain = "") {
        set $subdomain "_";
    }
    location / {
        index index.html;
        root /srv/http/vhost/${domain}.${tld}/${subdomain};
    }
}

from: Name-based virtual hosting with Nginx

自己:~/deployments 共用:/var/www 公司:/xxxxxx

app 在一个独立低权限用户跑 app 的代码放到该用户 home 里 log 放到挂载的/data 数据盘里

我自己的是~/目錄下(不科學 公用的是/var/wwwroot/

/opt/www/xxx

opt 是单独分区

需要 登录 后方可回复, 如果你还没有账号请 注册新账号