nginx:简化 rails 应用在特定路径上强制使用 SSL 的配置

nginx:简化 rails 应用在特定路径上强制使用 SSL 的配置

我使用下面的配置。它可以工作,但对我来说问题是重复了一些行。指令也proxy_*需要在里面,因为每个请求 nginx 只会执行一个。我有什么选项可以删除这个重复的代码,而不将其提取到新文件并在之后包含它?location /adminlocation

是否有一个选项可以告诉 nginx 在选择并处理location @rails后继续?location /admin

location @rails啊,顺便问一下,和有什么区别location /

server {
  ...
  location /admin {
    include /etc/nginx/force_ssl;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_redirect off;
    proxy_pass http://rails;

  }

  location @rails {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_redirect off;
    proxy_pass http://rails;
  }
...
}

在/etc/nginx/force_ssl中:

if ( $scheme = "http" ) {
  rewrite  ^/(.*)$  https://$host/$1 permanent;
}

答案1

您问了多个问题。


对于第一个问题,如何消除冗余:

一般来说,您可以将配置文件的任何部分移动到单独的文件中,然后使用include指令将其包含一次或多次。include 指令


关于从一个位置重定向到另一个位置的第二个问题:

使用rewrite指令,您可以从另一个位置调用一个位置。Nginx 内部将创建第二个请求来处理被调用的位置,但用户看不到任何内容。使用last重写目标后的关键字,您可以告诉 Nginx 此时停止处理规则,并根据当前的内容选择下一个位置$uri,此变量包含所有已执行重写的结果。因此,例如,如果您只想将所有内容重定向到,@rails您可以使用这样的规则将任何 URL 重写到@rails,然后last告诉 Nginx 查找名称为的位置@rails

rewrite . @rails last;

详细信息如下:重写模块


在第三个问题中,您询问这两个地点之间是否存在差异@rails/admin

根据您发布的片段,我无法告诉您。我只看到 比/admin包含的文件多一个@rails。因此,这个问题的答案取决于您的后端应用程序和其余 Nginx 配置的上下文。

相关内容