fastcgi_param REQUEST_SCHEME $scheme

Maxim Dounin mdounin at mdounin.ru
Wed Jun 3 02:41:06 UTC 2015


Hello!

On Tue, Jun 02, 2015 at 04:59:53PM -0400, S.A.N wrote:

> РНР скрипты которые работали под Apache, получали перемененную окружения
> REQUEST_SCHEME, в fastcgi_params этот параметр не назначается, я прописал
> fastcgi_param REQUEST_SCHEME $scheme.
> 
> Вопрос, не нарушил ли я спецификацию FastCGI, если нет, тогда почему этот
> параметр не указан в fastcgi_params из коробки?

Параметр REQUEST_SCHEME не предусматривается спецификацией CGI (и 
соответственно FastCGI), и в общем случае может содержать 
произвольное значение.  В Apache 2.3.11+ через него передают схему 
запроса.  Больше, судя по всему, это решение нигде не работает:

http://stackoverflow.com/questions/18008135/is-serverrequest-scheme-reliable

Однако в целом мне такой подход кажется куда более правильным, чем 
неочевидные проверки параметра HTTPS (который тоже ни разу не 
стандартный), и наверное добавить в fastcgi_params по умолчанию 
стоит.

Патч:

# HG changeset patch
# User Maxim Dounin <mdounin at mdounin.ru>
# Date 1433298498 -10800
#      Wed Jun 03 05:28:18 2015 +0300
# Node ID dbe6d01361b01c7e3b2a80f40492a180d242abcb
# Parent  0a096e2e51fcbb536007d94bf3edfc308e214f56
Added REQUEST_SCHEME parameter.

The REQUEST_SCHEME parameter was introduced in Apache 2.3.11 and seems
to be used by some scripts now.  It looks more logical than previously
used HTTPS.

diff --git a/conf/fastcgi.conf b/conf/fastcgi.conf
--- a/conf/fastcgi.conf
+++ b/conf/fastcgi.conf
@@ -11,6 +11,7 @@ fastcgi_param  DOCUMENT_URI       $docum
 fastcgi_param  DOCUMENT_ROOT      $document_root;
 fastcgi_param  SERVER_PROTOCOL    $server_protocol;
 fastcgi_param  HTTPS              $https if_not_empty;
+fastcgi_param  REQUEST_SCHEME     $scheme;
 
 fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
 fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;
diff --git a/conf/fastcgi_params b/conf/fastcgi_params
--- a/conf/fastcgi_params
+++ b/conf/fastcgi_params
@@ -10,6 +10,7 @@ fastcgi_param  DOCUMENT_URI       $docum
 fastcgi_param  DOCUMENT_ROOT      $document_root;
 fastcgi_param  SERVER_PROTOCOL    $server_protocol;
 fastcgi_param  HTTPS              $https if_not_empty;
+fastcgi_param  REQUEST_SCHEME     $scheme;
 
 fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
 fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;
diff --git a/conf/scgi_params b/conf/scgi_params
--- a/conf/scgi_params
+++ b/conf/scgi_params
@@ -9,6 +9,7 @@ scgi_param  DOCUMENT_ROOT      $document
 scgi_param  SCGI               1;
 scgi_param  SERVER_PROTOCOL    $server_protocol;
 scgi_param  HTTPS              $https if_not_empty;
+scgi_param  REQUEST_SCHEME     $scheme;
 
 scgi_param  REMOTE_ADDR        $remote_addr;
 scgi_param  REMOTE_PORT        $remote_port;
diff --git a/conf/uwsgi_params b/conf/uwsgi_params
--- a/conf/uwsgi_params
+++ b/conf/uwsgi_params
@@ -9,6 +9,7 @@ uwsgi_param  PATH_INFO          $documen
 uwsgi_param  DOCUMENT_ROOT      $document_root;
 uwsgi_param  SERVER_PROTOCOL    $server_protocol;
 uwsgi_param  HTTPS              $https if_not_empty;
+uwsgi_param  REQUEST_SCHEME     $scheme;
 
 uwsgi_param  REMOTE_ADDR        $remote_addr;
 uwsgi_param  REMOTE_PORT        $remote_port;

-- 
Maxim Dounin
http://nginx.org/



Подробная информация о списке рассылки nginx-ru