[BlueOnyx:26971] Re: Bug report on 5211R

Michael Stauber mstauber at blueonyx.it
Fri May 10 18:47:30 -05 2024


Hi Taco,

> I however don’t understand why you are unable to use nginx to proxy an https site.
> That is quite standard functionality afaik.
> Why configure apache as SSL proxy If you have nginx?
> I am fairly sure you can just enable (if it is not even enabled by default) proxying to an https site.

On a "factory default" BlueOnyx we have Apache running and Nginx 
stopped. The Vsites are only configured in Apache for HTTP *and* HTTPS.

Therefore Apache exclusively binds to ports 80/TCP and 443/TCP on all IPs.

When you enable "Nginx as SSL-Proxy", then Apache is reconfigured to 
*only* do HTTP. So it drops all bindings to port 443/TCP. And Nginx is 
then configured to bind to port 443/TCP on all IPs and only and gets 
configs to proxy all HTTPS requests to port 80/TCP and serve them via 
HTTP/2 over HTTPS to the client.

We at the most only use Nginx as a proxy and it doesn't serve real 
Vsites directly.

The thing is that Apache sure has some quirks. If you use PHP as DSO, 
then Apache won't let you do HTTP/2. And of course proxy via HTTPS is 
also extra complicated and not really practical.

Historically all BlueOnyx versions up to (and including) 5210R allowed 
to use the following implementations of PHP on a per Vsite basis:

- PHP Disabled
- DSO
- DSO + mod_ruid2
- suPHP
- PHP-FPM

But like said: As long as DSO is enabled, you can't do HTTP/2 and this 
sure is a drawback. HTTP/2 is sort of a must have these days.

Therefore on 5211R from day one on I dropped DSO support and 5211R only 
provides these PHP implementations on a per Vsite level:

- PHP Disabled
- suPHP
- PHP-FPM

This allows us to use HTTP/2 in Apache for both HTTP and HTTPS and we no 
longer need the Nginx SSL proxy to be able to do HTTP/2. But the feature 
is still present if someone wants to use it for whatever reason.

We *could* now theoretically switch entirely from Apache to Nginx. 
Because the main reason we couldn't before was that we kinda also wanted 
to retain DSO for as long as feasible and Nginx doesn't provide that. It 
can do suPHP and PHP-FPM, though.

However, there are some more things that Nginx can't (easily or at all) 
do. Stuff like .htaccess files, which many people use. And some other 
odd Apache modules which Nginx doesn't have out of the box.

The (optional) "Nginx as SSL-Proxy" feature being a proxy for 
HTTP-Apache sure is a crutch, but on 5210R it allows us to provide 
HTTP/2, DSO support and other Apache-only features seamlessly. Such as 
.htaccess and a few other odds and sods related to Apache modules.

However: *If* Nginx is enabled and doing SSL-Proxy? Then you can easily 
drop in some Nginx configs of your own to do whatever you want. As long 
as you only listen to port 443 and don't touch port 80, which Apache 
still has exclusive rights to. I also have some extra configs in my own 
Nginx servers here and there that serve special needs. Just drop your 
own configs into /etc/nginx/conf/ and make sure they have a *.conf 
ending and Nginx will include them whenever it is restarted.

-- 
With best regards

Michael Stauber


More information about the Blueonyx mailing list