Nginx - 在单独的目录中为主网站 URL 设置虚拟主机

Nginx - 在单独的目录中为主网站 URL 设置虚拟主机

刚刚将我的网站从 IIS 移至 Linux(Ubuntu Server 16.04 上的 LEMP)

仍在学习 Linux,不确定如何实现以下目标:

我有一个正在运行的网站 - 假设是 www.qwerty.com,并为其设置了 Google Analytics。假设它位于 /var/www/html/qwerty.com/public

我想在这个站点下创建一个虚拟目录,以提供两个带有嵌入式视频播放器和视频的独立页面。

可以说:

www.qwerty.com/videos 包含提供视频 #1 的所有文件,位于 /var/www/html/videos

www.qwerty.com/videos/video2 包含提供视频 #2 的所有文件,位于 /var/www/html/videos/video2

我想这样做是因为这两个页面网址都有各自的 Google 分析代码,因此访问者只会被跟踪到这些页面,而不是全部在 qwerty.com 下。

我是否可以通过使用指向主 /var/www/html/qwerty.com/public 目录的 video1 和 video 2 目录的符号链接来实现此目的?

感谢您的帮助

服务器块添加编辑

fastcgi_cache_path /var/www/html/qwerty.com/cache levels=1:2 keys_zone=QWERTY:100m inactive=60m;

服务器 {

server_name www.qwerty.com

    root /var/www/html/qwerty.com/public/;  

    index index.php index.html index.htm video.html;

location ~ /\. {
    deny all;
    }

location ~* /(?:uploads|files)/.*\.php$ {
    deny all;
    }

add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-Xss-Protection "1; mode=block" always;

location = /robots.txt {
    log_not_found off;
    access_log off;
    }

location = /favicon.ico {
    log_not_found off;
    access_log off;
    }

location ~* \.(engine|inc|info|install|make|module|profile|test|po|sh|.*sql|theme|tpl(\.php)?|xtmpl)$|^(\..*|Entries.*|Repository|Root|Tag|Template)$|\.php_
    {
        return 444;
    }

location ~* ^.+\.(js|css|swf|xml|txt|ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|rss|atom|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ {
        access_log off;
    log_not_found off;
    expires max;
    }

location ~* \.(pl|cgi|py|sh|lua)\$ {
    return 444;
    }

    location /videos {
            root /var/www/html;
            }

    location /videos/videos2 {
            root /var/www/html;
            }

set $skip_cache 0;

if ($request_method = POST) {
    set $skip_cache 1;
}

if ($query_string != "") {
    set $skip_cache 1;
}

if ($request_uri ~* "(/wp-admin/|/xmlrpc.php|/wp-(app|cron|login|register|mail).php|wp-.*.php|/feed/|index.php|wp-comments-popup.php|wp-links-opml.php|wp-locations.php|sitemap(_index)?.xml|[a-z0-9_-]+-sitemap([0-9]+)?.xml)") {
        set $skip_cache 1;
    }

if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_no_cache|wordpress_logged_in") {
    set $skip_cache 1;
}

if ($http_cookie ~* "PHPSESSID"){
    set $skip_cache 1;
}

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

location /phpmyadmin {
    auth_basic "Admin Login";
    auth_basic_user_file /etc/nginx/allow_phpmyadmin;
}

rewrite /wp-admin$ $scheme://$host$uri/ permanent;

location ~* \.(?:manifest|appcache|html?|xml|json)$ {
    expires -1;
    }

location ~* \.(?:rss|ato)$ {
    expires 1h;
    add_header Cache-Control "public";
    }

location ~* \.(?:jpg|jpeg|gif|png|ico|cur|gz|svg|svgz|mp4|ogg|ogv|webm|htc)$ {
    expires 1d;
    add_header Cache-Control "public";
    log_not_found off;
    access_log off;
    }

location ~* \.(?:css|js)$ {
    expires 7d;
    add_header Cache-Control "public";
    }

location ~ \.php$ {
    try_files $uri =404;
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
    fastcgi_index index.php;
    include fastcgi_params;
    fastcgi_cache_bypass $skip_cache;
    fastcgi_no_cache $skip_cache;
    fastcgi_cache QWERTY;
    fastcgi_cache_valid 60m;
}

location ~ /purge(/.*) {
    fastcgi_cache_purge QWERTY "$scheme$request_method$host$1";
}

}

答案1

nginx 的做法是这样的:

location /videos {
    root /var/www/html;
}

这里我们为以 开头的 URI 设置了不同的 nginx 根目录/videos。由于 nginx 会videos自动将 附加到 中指定的目录后root,因此我们/var/www/html只需要在那里。

答案2

只需在现有服务器块中添加位置块即可。这可能并不完美,但应该能给你一个好主意。

location /videos/ {
  root /var/www/html/;
}

添加您需要的任何其他位置块。

你可能最终需要稍微复杂一点的路径匹配逻辑,比如正则表达式或通配符。这里有一个很好的教程这里

相关内容