Forum: NGINX passing header information on to backend Apache/PHP

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
08b168b29f359aa6f9b829fb852fc1b2?d=identicon&s=25 Peter Langhans (Guest)
on 2009-04-05 15:13
(Received via mailing list)
Hi,

I'm using nginx 0.6.35, apache 2.0.63 and php 5.2.9.

My problem is, that I need my php scripts to know in some way or another
whether SSL is used or not (to include either https or http javascript
files
e.g.).

When using nginx as webfrontend proxy, it accepts all the ssl
connections
and it's working fine, but when I proxy through to apache, the knowledge
about SSL is 'lost'. If possible, I don't want to be using different
ports
for proxying through to apache.

I thought it'd be enough to set headers like:

for 80:
proxy_set_header           X-Secure     of;

for 443:
proxy_set_header           X-Secure     on;

put I have not found a way how I could retrieve those values from within
the
php script. They seem to be filtered out by Apache.

Does anyone have an idea how I can get any custom set header, set in the
nginx.conf through to the php scripts?

Thanks a lot,
Peter
1fadee9aa497ef8bcc425d0d9fc33fbb?d=identicon&s=25 Larry Bates (Guest)
on 2009-04-05 15:44
(Received via mailing list)
How about a rewrite rule that passes a parameter to your PHP script:



  _____

From: owner-nginx@sysoev.ru [mailto:owner-nginx@sysoev.ru] On Behalf Of
Peter
Langhans
Sent: Sunday, April 05, 2009 8:03 AM
To: nginx@sysoev.ru
Subject: passing header information on to backend Apache/PHP


Hi,

I'm using nginx 0.6.35, apache 2.0.63 and php 5.2.9.

My problem is, that I need my php scripts to know in some way or another
whether
SSL is used or not (to include either https or http javascript files
e.g.).

When using nginx as webfrontend proxy, it accepts all the ssl
connections and
it's working fine, but when I proxy through to apache, the knowledge
about SSL
is 'lost'. If possible, I don't want to be using different ports for
proxying
through to apache.

I thought it'd be enough to set headers like:

for 80:
proxy_set_header           X-Secure     of;

for 443:
proxy_set_header           X-Secure     on;

put I have not found a way how I could retrieve those values from within
the php
script. They seem to be filtered out by Apache.

Does anyone have an idea how I can get any custom set header, set in the
nginx.conf through to the php scripts?

Thanks a lot,
Peter
1fadee9aa497ef8bcc425d0d9fc33fbb?d=identicon&s=25 Larry Bates (Guest)
on 2009-04-05 15:45
(Received via mailing list)
What about passing parameter to your PHP script using rewrite rule?

rewrite  ^(.*)$  http:// <http://<url to backend server or IP:port>/>
<url to
backend server or IP:port>/login.php?proto=SSL

I might not be understanding your exact problem though.

-Larry Bates

  _____

From: owner-nginx@sysoev.ru [mailto:owner-nginx@sysoev.ru] On Behalf Of
Peter
Langhans
Sent: Sunday, April 05, 2009 8:03 AM
To: nginx@sysoev.ru
Subject: passing header information on to backend Apache/PHP


Hi,

I'm using nginx 0.6.35, apache 2.0.63 and php 5.2.9.

My problem is, that I need my php scripts to know in some way or another
whether
SSL is used or not (to include either https or http javascript files
e.g.).

When using nginx as webfrontend proxy, it accepts all the ssl
connections and
it's working fine, but when I proxy through to apache, the knowledge
about SSL
is 'lost'. If possible, I don't want to be using different ports for
proxying
through to apache.

I thought it'd be enough to set headers like:

for 80:
proxy_set_header           X-Secure     of;

for 443:
proxy_set_header           X-Secure     on;

put I have not found a way how I could retrieve those values from within
the php
script. They seem to be filtered out by Apache.

Does anyone have an idea how I can get any custom set header, set in the
nginx.conf through to the php scripts?

Thanks a lot,
Peter
08b168b29f359aa6f9b829fb852fc1b2?d=identicon&s=25 Peter Langhans (Guest)
on 2009-04-05 16:05
(Received via mailing list)
Hi Larry,

thx for that. I considered that as well, but I find the solution
somewhat
"unelegant". It should either be identified by the port (which is hard
due
to architecture setup in my case) or a header (which I would prefer).

Thx for hinting this solution out again. Maybe I really should consider
it
and put my desire for 'compliable'/'elegant' solutions into the bin...
:(
(which would hurt my heart).

Bests,
Pete
08b168b29f359aa6f9b829fb852fc1b2?d=identicon&s=25 Peter Langhans (Guest)
on 2009-04-05 16:35
(Received via mailing list)
Larry,

thanks for your reply again. Sorry I stole your time for my own
dumbness.

It's totally possible to do it via headers. The example I gave above,
works
perfectly. I have just been too dump to test it in https (I tested in
http)
and wondered why the header does not come through as expected :( Oh
lord.

So just for reference. As the manual states correctly, you can pass any
header information on to your backend scripts via the

proxy_set_header           Header-Name    Header-Vale;

directive. Apache does NOT filter it out, and it's visible within PHP by
using one of the two following options:

1.) use the normal $_SESSION variable. CAVEAT: when using the $_SESSION
variable your header "Header-Name" becomes "HTTP_HEADER_NAME" (watch
casing
and underscore instead of dash)

2.) use the apache_request_headers function to retrieve
original/unchanged
values (http://uk.php.net/apache_request_headers)

Thanks for your time, folks!

Pete
B9340b8cfd6b4038536e58327ef648c9?d=identicon&s=25 Arvind Jayaprakash (Guest)
on 2009-04-05 16:39
(Received via mailing list)
On Apr 05, Peter Langhans wrote:
>about SSL is 'lost'. If possible, I don't want to be using different ports
>put I have not found a way how I could retrieve those values from within the
>php script. They seem to be filtered out by Apache.
>
>Does anyone have an idea how I can get any custom set header, set in the
>nginx.conf through to the php scripts?

Please show us your config and php script.
94389c4cf2baaab5798bbc5e899ff0e9?d=identicon&s=25 Gena Makhomed (Guest)
on 2009-04-05 17:38
(Received via mailing list)
On Sunday, April 5, 2009 at 16:02:34, Peter Langhans wrote:

PL> My problem is, that I need my php scripts to know
PL> in some way or another whether SSL is used or not
PL> (to include either https or http javascript files e.g.).

PL> When using nginx as webfrontend proxy, it accepts all the ssl
PL> connections and it's working fine, but when I proxy through to
PL> apache, the knowledge about SSL is 'lost'. If possible, I don't
PL> want to be using different ports for proxying through to apache.
...
PL> Does anyone have an idea how I can get any custom set header,
PL> set in the nginx.conf through to the php scripts?

nginx config:
=============

proxy_set_header X-Nginx-Scheme $scheme;

# nginx variable $scheme will be 'http' or 'https'.

apache config:
==============

SetEnvIf X-Nginx-Scheme "^https$" HTTPS=on

# Apache environment variable HTTPS will be 'on' or not defined.

PHP code:
=========

$scheme = getenv('HTTPS') && strtolower(getenv('HTTPS')) != 'off'
    ? 'https'
    : 'http';

# PHP variable $scheme will be 'http' or 'https'.
08b168b29f359aa6f9b829fb852fc1b2?d=identicon&s=25 Peter Langhans (Guest)
on 2009-04-05 18:06
(Received via mailing list)
Hi Gena,

thx for the reply. Works perfectly as well!

Bests,
Pete
This topic is locked and can not be replied to.