刚刚将我的网站从 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/;
}
添加您需要的任何其他位置块。
你可能最终需要稍微复杂一点的路径匹配逻辑,比如正则表达式或通配符。这里有一个很好的教程这里。