Re: Issue with pgAdmin 4 Login Behind NGINX Reverse Proxy at /pgadmin4 Path

From: Yogesh Mahajan <yogesh(dot)mahajan(at)enterprisedb(dot)com>
To: Shakir Idrisi <shakir(at)webuzo(dot)com>
Cc: "pgadmin-support lists(dot)postgresql(dot)org" <pgadmin-support(at)lists(dot)postgresql(dot)org>
Subject: Re: Issue with pgAdmin 4 Login Behind NGINX Reverse Proxy at /pgadmin4 Path
Date: 2025-08-04 08:05:08
Message-ID: CAMa=N=OEy=rMwXB4o1Fknj=-EUXNxha3Vvp8-defORCk6Np17w@mail.gmail.com
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgadmin-support

Hi,

Typical reason for the 401 while redirection from Non-SSL to SSL is
because the authentication credentials (like cookies, tokens, or headers)
are not preserved correctly.
Unless you provide your configuration, its difficult to help further.

Thanks,
Yogesh Mahajan
EnterpriseDB

On Mon, Aug 4, 2025 at 1:02 PM Shakir Idrisi <shakir(at)webuzo(dot)com> wrote:

> HI,
>
> When I access the URL, it will load the SSL certificate properly on the
> domain, but why do three requests get a 401 error?
>
> Any idea?
>
>
>
> On Mon, Aug 4, 2025 at 12:46 PM Yogesh Mahajan <
> yogesh(dot)mahajan(at)enterprisedb(dot)com> wrote:
>
>> Hi,
>>
>> So the issue is with SSL. I guess this has to do with the nginx
>> configuration, not the pgadmin one.
>> Generic redirection for non-SSL to SSL should look as below -
>>
>> server {
>> listen 80;
>> return 301 https://$host$request_uri;
>> }
>>
>> server {
>> listen 443 ssl;
>> server_name _;
>> ssl_certificate /etc/nginx/server.crt;
>> ssl_certificate_key /etc/nginx/server.key;
>> ........
>>
>> location /pgadmin4/ {
>> proxy_pass http://unix:/tmp/pgadmin4.sock:/<scripnt_name>/;
>>
>> .........
>>
>>
>> }
>> }
>>
>>
>> Thanks,
>> Yogesh Mahajan
>> EnterpriseDB
>>
>>
>> On Mon, Aug 4, 2025 at 12:31 PM Shakir Idrisi <shakir(at)webuzo(dot)com> wrote:
>>
>>> Hi,
>>>
>>> I have tried the above solution, but it is still not working.
>>> I have monitored the log, and it shows that the user is logged in.
>>> *2025-08-04 12:23:33,777: INFO pgadmin: Internal user
>>> shakir(at)xyz(dot)com <shakir(at)xyz(dot)com> logged in.*
>>>
>>> However, after logging in, the page appears blank.
>>>
>>> In the browser’s *Network tab*, most requests return *200*, but about *3
>>> requests return 401 Unauthorized*.
>>> [image: image.png]
>>>
>>>
>>> conf I'm using, this works when accessed on http, but when I access it
>>> on https, it shows a blank page,
>>> certificate is installed on the domain.
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>> *location = /pgadmin4 { rewrite ^ /pgadmin4/; }location ^~ /pgadmin4/ {
>>> proxy_pass http://unix:/tmp/pgadmin4.sock; proxy_set_header Host
>>> $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header
>>> X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header
>>> X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Host $host;
>>> proxy_set_header X-Script-Name /pgadmin4/; proxy_http_version 1.1;
>>> proxy_read_timeout 300; proxy_connect_timeout 60;}*
>>>
>>> On Mon, Aug 4, 2025 at 10:38 AM Yogesh Mahajan <
>>> yogesh(dot)mahajan(at)enterprisedb(dot)com> wrote:
>>>
>>>> Hi,
>>>>
>>>> Can you please try changing proxy_pass to
>>>>
>>>> proxy_pass http://unix:/tmp/pgadmin4.sock:/<scripnt_name>/;
>>>>
>>>> As you are setting the script name. If it does not work, please paste
>>>> the complete configuration for nginx, and service file to debug more.
>>>>
>>>>
>>>> Thanks,
>>>> Yogesh Mahajan
>>>> EnterpriseDB
>>>>
>>>>
>>>> On Sun, Aug 3, 2025 at 10:21 PM Shakir Idrisi <shakir(at)webuzo(dot)com>
>>>> wrote:
>>>>
>>>>> Hi,
>>>>>
>>>>> Any update on this?
>>>>>
>>>>> On Thu, Jul 31, 2025, 7:27 PM Shakir Idrisi <shakir(at)webuzo(dot)com> wrote:
>>>>>
>>>>>> Hi,
>>>>>>
>>>>>> I am facing an issue when I try to access the pgadmin of https after
>>>>>> logging in; it shows a blank page. Can you please help me figure it out?
>>>>>>
>>>>>> This is the config I am using.
>>>>>>
>>>>>>
>>>>>>
>>>>>> *location = /pgadmin4 { return 301 /pgadmin4/;}*
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> *location ^~ /pgadmin4/ { proxy_pass
>>>>>> http://unix:/tmp/pgadmin4.sock; proxy_set_header Host
>>>>>> $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header
>>>>>> X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header
>>>>>> X-Forwarded-Proto $scheme;proxy_set_header X-Forwarded-Host
>>>>>> $host;proxy_set_header X-Script-Name /pgadmin4;proxy_http_version 1.1;
>>>>>> proxy_read_timeout 300; proxy_connect_timeout 60;}*
>>>>>>
>>>>>> In the browser console of I am getting this error.
>>>>>> *Object { message: "Request failed with status code
>>>>>> 401", name: "AxiosError", code: "ERR_BAD_REQUEST", config: {…}, request: XMLHttpRequest, response: {…}, status: 401, stack: "".....*
>>>>>>
>>>>>> On Mon, Jun 23, 2025 at 9:12 AM Yogesh Mahajan <
>>>>>> yogesh(dot)mahajan(at)enterprisedb(dot)com> wrote:
>>>>>>
>>>>>>> Hi,
>>>>>>>
>>>>>>> Can you please try modifying '/pgadmin4' like below -
>>>>>>> `location = /pgadmin4 {
>>>>>>> return 301 /pgadmin4/;
>>>>>>> }`
>>>>>>>
>>>>>>> You can use webserver /kerberos authentication method for automatic
>>>>>>> login. With internal authentication method, you will required to enter your
>>>>>>> userid/password. You may also use OAuth2.
>>>>>>>
>>>>>>> Thanks,
>>>>>>> Yogesh Mahajan
>>>>>>> EnterpriseDB
>>>>>>>
>>>>>>>
>>>>>>> On Fri, Jun 20, 2025 at 1:24 PM Shakir Idrisi <shakir(at)webuzo(dot)com>
>>>>>>> wrote:
>>>>>>>
>>>>>>>> Hi,
>>>>>>>>
>>>>>>>> One more question, can I use autologin in pgAdmin4? I am using the
>>>>>>>> internal method for authentication.
>>>>>>>>
>>>>>>>> On Fri, Jun 20, 2025 at 11:38 AM Shakir Idrisi <shakir(at)webuzo(dot)com>
>>>>>>>> wrote:
>>>>>>>>
>>>>>>>>> Hi,
>>>>>>>>>
>>>>>>>>> Thanks, it worked.
>>>>>>>>>
>>>>>>>>> I am facing an issue when I try to access the pgadmin of https
>>>>>>>>> after logging in; it shows a blank page. Can you please help me figure it
>>>>>>>>> out?
>>>>>>>>>
>>>>>>>>> This is the config I am using for the proxy in HTTPS and HTTP
>>>>>>>>> vhblock
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> *location = /pgadmin4 { rewrite ^ /pgadmin4/; }location ^~
>>>>>>>>> /pgadmin4/ { proxy_pass http://unix:/tmp/pgadmin4.sock;
>>>>>>>>> proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr;
>>>>>>>>> proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
>>>>>>>>> proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header
>>>>>>>>> X-Forwarded-Host $host; proxy_set_header X-Script-Name /pgadmin4;
>>>>>>>>> proxy_http_version 1.1; proxy_read_timeout 300; proxy_connect_timeout
>>>>>>>>> 60;}*
>>>>>>>>>
>>>>>>>>> In the browser console of I am getting this error.
>>>>>>>>> *Object { message: "Request failed with status code 401", name:
>>>>>>>>> "AxiosError", code: "ERR_BAD_REQUEST", config: {…}, request:
>>>>>>>>> XMLHttpRequest, response: {…}, status: 401, stack: "".....*
>>>>>>>>>
>>>>>>>>> On Mon, Jun 16, 2025 at 9:56 AM Yogesh Mahajan <
>>>>>>>>> yogesh(dot)mahajan(at)enterprisedb(dot)com> wrote:
>>>>>>>>>
>>>>>>>>>> Hi,
>>>>>>>>>>
>>>>>>>>>> You can use the command 'update-user' for user update.
>>>>>>>>>>
>>>>>>>>>> To explore more options, you can use the command below with
>>>>>>>>>> pgadmin venv.
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> `python3.12 setup.py update-user --help `
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> Typical command would be -
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> `python3.12 setup.py update-user <user_id> --password
>>>>>>>>>> <new_password> --role Administrator --sqlite-path <pgadmin_db_path>`
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> Thanks,
>>>>>>>>>> Yogesh Mahajan
>>>>>>>>>> EnterpriseDB
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> On Sat, Jun 14, 2025 at 5:09 PM Shakir Idrisi <shakir(at)webuzo(dot)com>
>>>>>>>>>> wrote:
>>>>>>>>>>
>>>>>>>>>>> Hi,
>>>>>>>>>>>
>>>>>>>>>>> I hope you're doing well.
>>>>>>>>>>>
>>>>>>>>>>> pgAdmin is now working properly. Earlier, I ran the setup-db
>>>>>>>>>>> command and set the admin username and password.
>>>>>>>>>>>
>>>>>>>>>>> Now, after reinstalling pgAdmin, I noticed that the data
>>>>>>>>>>> directory (including pgadmin.db) was not removed. I would like to either
>>>>>>>>>>> reuse the old admin password or reset it if needed.
>>>>>>>>>>>
>>>>>>>>>>> Is there a way to reset the admin user's password using a
>>>>>>>>>>> command in this case?
>>>>>>>>>>> Your guidance would be greatly appreciated.
>>>>>>>>>>>
>>>>>>>>>>> Thank you for your help.
>>>>>>>>>>>
>>>>>>>>>>> On Tue, Jun 10, 2025, 9:57 PM Shakir Idrisi <shakir(at)webuzo(dot)com>
>>>>>>>>>>> wrote:
>>>>>>>>>>>
>>>>>>>>>>>> Ok, I will check.
>>>>>>>>>>>>
>>>>>>>>>>>> On Tue, Jun 10, 2025, 5:26 PM Yogesh Mahajan <
>>>>>>>>>>>> yogesh(dot)mahajan(at)enterprisedb(dot)com> wrote:
>>>>>>>>>>>>
>>>>>>>>>>>>> Hi,
>>>>>>>>>>>>>
>>>>>>>>>>>>> I could reproduce the error when I have multiple workers.
>>>>>>>>>>>>> Maybe you can try restarting the Guicorn service.
>>>>>>>>>>>>> Can you please try once in the private browser window?
>>>>>>>>>>>>>
>>>>>>>>>>>>> Thanks,
>>>>>>>>>>>>> Yogesh Mahajan
>>>>>>>>>>>>> EnterpriseDB
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> On Tue, Jun 10, 2025 at 3:54 PM Shakir Idrisi <
>>>>>>>>>>>>> shakir(at)webuzo(dot)com> wrote:
>>>>>>>>>>>>>
>>>>>>>>>>>>>> HI,
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> I have used this command, and I have created a systemd file
>>>>>>>>>>>>>> to start and stop the service.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> *ExecStart=/var/w-data/pgadmin4/pgadmin_venv/bin/gunicorn \*
>>>>>>>>>>>>>> * --workers 1 \*
>>>>>>>>>>>>>> * --threads=25 \*
>>>>>>>>>>>>>> * --bind unix:/tmp/pgadmin4.sock \*
>>>>>>>>>>>>>> * --chdir
>>>>>>>>>>>>>> /var/w-data/pgadmin4/pgadmin_venv/lib/python3.11/site-packages/pgadmin4 \*
>>>>>>>>>>>>>> * --umask 007 \*
>>>>>>>>>>>>>> * pgAdmin4:app*
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Also, when I try multiple times then it will log in and show
>>>>>>>>>>>>>> a blank dashboard, or sometimes it will show a dashboard but not work
>>>>>>>>>>>>>> properly. In the console log, I see the following error
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> [image: image.png]
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> On Tue, Jun 10, 2025 at 3:26 PM Yogesh Mahajan <
>>>>>>>>>>>>>> yogesh(dot)mahajan(at)enterprisedb(dot)com> wrote:
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Hi,
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Can you please share your guicorn command?
>>>>>>>>>>>>>>> How many workers are you spawning? It should be 1.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Thanks,
>>>>>>>>>>>>>>> Yogesh Mahajan
>>>>>>>>>>>>>>> EnterpriseDB
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> On Tue, Jun 10, 2025 at 12:34 PM Shakir Idrisi <
>>>>>>>>>>>>>>> shakir(at)webuzo(dot)com> wrote:
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Hi,
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> I've installed *pgAdmin 4* on my Linux server and
>>>>>>>>>>>>>>>> configured it behind *Gunicorn and NGINX*, accessible at:
>>>>>>>>>>>>>>>> https://domain.com/pgadmin4/.
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> The login page loads correctly. However, after entering
>>>>>>>>>>>>>>>> valid credentials, I'm redirected back to the login page without any error
>>>>>>>>>>>>>>>> message. Occasionally, I see a *CSRF token* error, which
>>>>>>>>>>>>>>>> disappears after a page refresh, but the login still fails.
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> In the browser console or network tab, I sometimes see 401
>>>>>>>>>>>>>>>> errors or issues loading static assets.
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Here's the NGINX configuration I'm currently using to
>>>>>>>>>>>>>>>> reverse proxy pgAdmin via a Unix socket:
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> *nginx*
>>>>>>>>>>>>>>>> location /pgadmin4/ {
>>>>>>>>>>>>>>>> proxy_pass http://unix:/tmp/pgadmin4.sock:/;
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> # Proxy headers
>>>>>>>>>>>>>>>> proxy_set_header Host $host;
>>>>>>>>>>>>>>>> proxy_set_header X-Real-IP $remote_addr;
>>>>>>>>>>>>>>>> proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
>>>>>>>>>>>>>>>> proxy_set_header X-Forwarded-Proto $scheme;
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> # Inform pgAdmin it's served under a subpath
>>>>>>>>>>>>>>>> proxy_set_header X-Script-Name /pgadmin4;
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> # Optional: timeouts and static asset handling
>>>>>>>>>>>>>>>> proxy_read_timeout 300;
>>>>>>>>>>>>>>>> proxy_connect_timeout 60;
>>>>>>>>>>>>>>>> }
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Could you please advise:
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> 1.
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Is there something wrong with the proxy setup?
>>>>>>>>>>>>>>>> 2.
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Do I need to handle static assets or cookies
>>>>>>>>>>>>>>>> differently when using a subpath (/pgadmin4)?
>>>>>>>>>>>>>>>> 3.
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Are there any additional settings required in the
>>>>>>>>>>>>>>>> pgAdmin config to work correctly behind a sub-URI with NGINX?
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Thanks in advance for your guidance.
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>

In response to

Responses

Browse pgadmin-support by date

  From Date Subject
Next Message Shakir Idrisi 2025-08-04 09:45:03 Re: Issue with pgAdmin 4 Login Behind NGINX Reverse Proxy at /pgadmin4 Path
Previous Message Shakir Idrisi 2025-08-04 07:32:33 Re: Issue with pgAdmin 4 Login Behind NGINX Reverse Proxy at /pgadmin4 Path