我有一个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;
}
}
非常感谢您花时间阅读本文。