Nginx 重写特定目录

Nginx 重写特定目录

我必须承认我对 WebServers 完全陌生,现在试图弄清楚如何配置我的 nginx(用于家庭用途)。我已经在 nginx 上运行了具有默认结构的 Web 服务 rutorrent。现在我想将目录结构更改为:

/usr/share/nginx/html/        (should contain the default-config)
/usr/share/nginx/rtorr_dir/   (should contain the rutorrent-content)

我的目标是:在我的浏览器上输入192.168.0.2/rutorrent,然后会自动访问rtorr_dir。我尝试了以下操作:

server {
        listen *:80;

    access_log  /var/log/nginx/access.log info;
    error_log   /var/log/nginx/error.log debug;
    auth_basic      "ruser";
    auth_basic_user_file    /etc/users.htpasswd;

        location /rutorrent {
          rewrite /rutorrent/(.*) /$1 break;
          root /usr/share/nginx/rtorr_dir;
          index index.php index.html;
        }

        location /RPC1 {
          include /etc/nginx/scgi_params;
          scgi_pass backend2;
        }
        location ~  \.php$ {
          fastcgi_split_path_info ^(.+\.php)(.*)$;
          fastcgi_pass   backend;
        ....

我也尝试了location /其他的变化,但显然不是正确的:(。所以我的问题是

  • 如何正确设置重写?
  • 当根目录已经包含了 URL 的某些部分时,会发生什么变化?(例如 rtorr_dir)
  • 我是否也需要对其他位置进行一些更改,或者这是否会自动对底层文件(即 php)进行更改?

答案1

您可以alias在用例中使用指令。参考:http://nginx.org/en/docs/http/ngx_http_core_module.html#alias

所以,

location /rutorrent {
  alias /usr/share/nginx/rtorr_dir;
}

应该可以工作。您可能仍需要index和指令。

我是否也需要对其他位置进行一些更改,或者这是否会自动对底层文件(即 php)进行更改?

由于您使用多个位置,我建议location ~* \.php$ {在每个位置使用。例如...

location /rutorrent {
  alias /usr/share/nginx/rtorr_dir;
  try_files $uri $uri/ /index.php;

  location ~* \.php$ {
    # directives to process PHP
  }
}

location /another_random_location {
  alias /usr/share/nginx/another_random_directory;
  try_files $uri $uri/ /index.php;

  location ~* \.php$ {
    # directives to process PHP
  }
}

如果你保留 PHP 位置块旁边root其他位置块,那么该 PHP 块将仅从块的指令集中获取其路径server。最安全的方法是将 PHP 位置块包含在需要处理 PHP 的每个位置上。

我希望这能有所帮助。

相关内容