/ var / www中有多个项目的服务器?

时间:2017-09-26 06:40:46

标签: nginx virtualhost

我有一台服务器,我想用作个人服务器,我的所有项目都在/var/www下。

我目前有两个文件夹,/var/www/html/var/www/site

我希望能够通过以下网址访问这些文件夹(123.123.123.123是我的服务器IP):

123.123.123.123/html123.123.123.123/site

这是我的default虚拟主机文件:

server {
    listen 80 default_server;
    listen [::]:80 default_server;

    root /var/www/html;

    index index.php index.html index.htm index.nginx-debian.html;

    server_name 123.123.123.123;

    location / {
        try_files $uri $uri/ =404;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.0-fpm.sock;
    }

    location ~ /\.ht {
        deny all;
    }
}

以下是我为/var/www/site创建的名为site的内容:

server {
    listen 80;
    listen [::]:80;

    # Because this site uses Laravel, it needs to point to /public
    root /var/www/site/public;

    index index.php index.html index.htm index.nginx-debian.html;

    server_name 123.123.123.123;

    location /site {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.0-fpm.sock;
    }

    location ~ /\.ht {
        deny all;
    }
}

但是当我去123.123.123.123/site时,它说404 Not Found,显然我做错了(是的,我重新启动了nginx)。

请帮忙!

1 个答案:

答案 0 :(得分:0)

您只需要一个server阻止,因为/html/site都位于同一个server

使用nginx -t检查nginx是否确实重新启动而不会出现任何错误。

由于/site使用复杂的目录方案,您需要使用嵌套的location块来使路径正确。

你的第一个项目似乎有一个简单的静态和PHP文件排列。您可以使用root /var/www;语句将以/html开头的URI映射到html文件夹。有关详情,请参阅this document

这样的事可能适合你:

server {
    listen 80 default_server;
    listen [::]:80 default_server;

    root /var/www/;

    index index.php index.html index.htm index.nginx-debian.html;

    location / {
        try_files $uri $uri/ =404;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.0-fpm.sock;
    }

    location ~ /\.ht {
        deny all;
    }

    location ^~ /site {
        alias /var/www/site/public;
        if (!-e $request_filename) { rewrite ^ /site/index.php last; }

        location ~ \.php$ {
            if (!-f $request_filename) { return 404; }

            include snippets/fastcgi-php.conf;
            fastcgi_param  SCRIPT_FILENAME $request_filename;
            fastcgi_pass unix:/run/php/php7.0-fpm.sock;
        }
    }
}

默认服务器不需要server_name