proxy_pass Not Working on Port 80

Francis Daly francis at
Wed Sep 9 08:57:12 UTC 2020

On Wed, Sep 09, 2020 at 01:58:42AM -0400, figshta wrote:

Hi there,

> I have two servers behind on IP address.

What does that mean, in terms of "traffic to the IP address gets sent
to server#1 or to server'2"?

> Server1 is hosting several websites
> all using TLS exclusively.

That suggests that all incoming traffic to your IP on port 443 gets sent
to server#1.

>  Recently I set up Server2 and setup one website using reverse proxy from
> Server1 and finally successfully deployed TLS on it as well. 
> During that setup I had to use port 80 to use Certbot with Let's Encrypt. 
> Now I'm trying to do it again the same way with another domain. 
> The proxy_pass directive works on port 8080, but when I switch it to port 80
> I get a 404 error.

What request do you make that returns the 404 error?

What response do you want for that request? (Probably something like
"http 200 and the contents of *this* file".)

(And: what does the nginx log file say about the 404 error? Is it trying
to read a different file from what you expect?)

> Here is setup in question: (again, Port 8080 works, but port 80 does not)
> ----------------------------------
> #Proxy server (Server1)
> # server
> server {
>         listen 80;
>         server_name;
>         location / {
>                 proxy_pass;

With that config, your server#2 will not see a Host: header that includes

If your server#2 needs that Host header, things will probably break.

> #Proxied Server (Server2)
> server {
>         listen 80;
>         server_name;
>         root /var/www/;
>         location / {
>         }
> }

If that is the entire config on server#2, it should probably work. But
if you have more server{} blocks, such that the "default" port-80 server
is something else, then that extra config might be causing this not to
act in the way that you want.

> Any help would be greatly appreciated.

Depending on what else is wanted, I'd suggest one of the methods to
make sure that the Host: header that you want, is sent to server#2 in
the proxy_pass request from server#1.

That can be proxy_set_header; or proxy_pass with the hostname and either
an upstream of the hostname, or the system resolver to refer to the
server#2 address.

(Or: just use port 8080 on server#2 for this site; and port 8081 on
server#2 for the next site.)

Good luck with it,

Francis Daly        francis at

More information about the nginx mailing list