4

我已经阅读了文档,扫描了示例,但我一生都无法弄清楚为什么这不起作用。我对 nginx 完全陌生,所以如果这是一个愚蠢的简单答案,请放轻松。

user www-data;
worker_processes 4;
pid /var/run/nginx.pid;

events {
        worker_connections 768;
        # multi_accept on;
}

http {

        ##
        # Basic Settings
        ##

        sendfile on;
        tcp_nopush on;
        tcp_nodelay on;
        keepalive_timeout 65;
        types_hash_max_size 2048;
        # server_tokens off;

        # server_names_hash_bucket_size 64;
        # server_name_in_redirect off;

        include /etc/nginx/mime.types;
        default_type application/octet-stream;

        ##
        # Logging Settings
        ##

        access_log /var/log/nginx/access.log;
        error_log /var/log/nginx/error.log;

        ##
        # Gzip Settings
        ##

        gzip on;
        gzip_disable "msie6";

        # gzip_vary on;
        # gzip_proxied any;
        # gzip_comp_level 6;
        # gzip_buffers 16 8k;
        # gzip_http_version 1.1;
        # gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;

        ##
        # Virtual Host Configs
        ##

        #include /etc/nginx/conf.d/*.conf;
        #include /etc/nginx/sites-enabled/*;

    server {
                listen       80;
                server_name  localhost domain.com;

                root /home/TMlabs/server_files;
                index index.html index.htm;

                location = /othersite {
                    root /home/TMlabs/server_files/location2;
                    index index.html index.htm;
                }

                location / {
                    root   /home/TMlabs/server_files/location1;
                    index  index.html index.htm;
                }

        }

如果我需要包含更多内容,请告诉我,我将转储整个 nginx.conf。不过,这很基本。

我想要实现的只是将 domain.com 映射到 location 中指定的根/(正在工作)并映射domain.com/othersite到该指令中指定的根。出于某种原因,/home/TMlabs/server_files/location1/index.html当我导航到domain.com/othersite而不是index.html文件/home/TMlabs/server_files/location2夹中的文件时,它会返回文档。我尝试删除等号并使用可用于匹配的不同运算符,但似乎没有任何效果。这可能是我误解的一些非常基本的东西,对这些东西很陌生。我也很讨厌正则表达式。有人愿意开导吗?

编辑:我认为正在发生的事情是它实际上完全忽略了我的指令,只是/usr/share/nginx/www用作文档根目录。我在任何地方都看不到这个配置;我错过了什么?

4

2 回答 2

3

=前缀意味着指定的位置应该与请求的 URL 完全匹配。如果您查看错误日志,您会看到 Nginx 尝试提供文件 [...]/location2/otherside,而不是[...]/location2/index.{html,htm}. (为简单起见,省略了完整路径)

index指令是完全匹配位置内的 noop。

要解决此问题,您可以将文件重命名为otherside并具有此配置

location = /otherside {
    root /home/TMlabs/server_files/location2;
}

或使用alias指令

location = /otherside {
    alias [...]/location2/index.html;
}

PS:Nginx 会尝试Content-Type通过 URL 的扩展来计算响应的值。由于/otherside没有扩展,它将使用application/octet-stream导致浏览器尝试下载内容

您可以包含.html扩展名,也可以在default_type里面使用指令 location

default_type "text/html";
于 2012-08-28T02:44:29.133 回答
0

以下应该可以解决问题:

server {
        listen       80;
        server_name  localhost domain.com;

        root /home/TMlabs/server_files;
        index index.html index.htm;

        location / { try_files location1/$uri location1/$uri/; }
        location /othersite { try_files location2/$uri location2/$uri/; }
}
于 2012-08-25T11:37:31.960 回答