在nginx

时间:2015-10-21 16:43:36

标签: nginx uwsgi

我有一个nginx服务器,它有几个代码路径到uwsgi代理,以便强制执行服务器范围的HTTPS以及几个基于路径的异常。有没有办法在几个基于路径的位置重用包含uwsgi配置的位置,还是可以重新考虑我的配置以简化它?

功能要求

我需要在域X-Forwarded-Proto上全局强制执行HTTPS(由www.example.net标头定义),但以下情况除外:

  • www.example.com/legacy/
  • www.example.com/api/webhook/

工作配置

以下代码有效,但由于重复使用uwsgi配置参数,因此不是DRY。

server {
  listen 8054;
  server_name www.example.net;

  #
  # HTTPS Exceptions
  #

  location /legacy/ {
    include /etc/nginx/uwsgi_params;
    uwsgi_pass unix:/path/to/uwsgi/socket.sock;
  }

  location /api/webhook/ {
    include /etc/nginx/uwsgi_params;
    uwsgi_pass unix:/path/to/uwsgi/socket.sock;
  }

  #
  # Primary uwsgi proxy
  #
  location / {
    #
    # Enforce HTTPS
    #
    if ($http_x_forwarded_proto != "https") {
      return 301 https://www.example.com$request_uri;
    }

    include /etc/nginx/uwsgi_params;
    uwsgi_pass unix:/path/to/uwsgi/socket.sock;
  }
}

非工作配置

以下配置不起作用(具体而言,命名位置不是return的有效参数),但草拟了我希望如何转移到更多可重复使用的uwsgi配置。

#
# Reusable uwsgi configuration
#
location @python {
  include /etc/nginx/uwsgi_params;
  uwsgi_pass unix:/path/to/uwsgi/socket.sock;
}

server {
  listen 8054;
  server_name www.example.net;

  #
  # HTTPS Exceptions
  #

  location /legacy/ {
    return @python;
  }

  location /api/webhook/ {
    return @python;
  }

  #
  # Primary site entry point
  #
  location / {
    #
    # Enforce HTTPS
    #
    if ($http_x_forwarded_proto != "https") {
      return 301 https://www.example.com$request_uri;
    }

    return @python;
  }
}

非常感谢您花时间阅读本文。

0 个答案:

没有答案
相关问题