# Nginx Proxy Manager

<table border="1" id="bkmrk-" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 50%;"></col><col style="width: 50%;"></col></colgroup><tbody><tr><td>[![nginxproxy.png](https://bookstack.notflix.pknw1.co.uk/uploads/images/gallery/2026-02/scaled-1680-/nginxproxy.png)](https://bookstack.notflix.pknw1.co.uk/uploads/images/gallery/2026-02/nginxproxy.png)</td><td>  
</td></tr></tbody></table>

<table border="1" id="bkmrk-external-ip%3A-149.202" style="border-collapse: collapse; width: 99.6429%; height: 367px;"><colgroup><col style="width: 38.2915%;"></col><col style="width: 61.7085%;"></col></colgroup><tbody><tr><td>**External IP:** 149.202.72.112

via [OVH Control Panel](https://manager.eu.ovhcloud.com/#/web-domains/domain/pknw1.co.uk) (kp93246-ovh)

**TailScale IP:** 100.100.69.2 via[ Tailscale Admin Panel](https://login.tailscale.com/admin/machines) (<pkswansea@outlook.com>)

OVH DNS pknw1.co.uk

\*.pknw1.co.uk &gt; 149.202.72.112

\*.admin.pknw1.co.uk -&gt; 100.100.69.2

</td><td>[![Ingress3.png](https://bookstack.notflix.pknw1.co.uk/uploads/images/gallery/2026-02/scaled-1680-/ingress3.png)](https://bookstack.notflix.pknw1.co.uk/uploads/images/gallery/2026-02/ingress3.png)

</td></tr></tbody></table>

[![proxy.png](https://bookstack.notflix.pknw1.co.uk/uploads/images/gallery/2026-02/scaled-1680-/proxy.png)](https://bookstack.notflix.pknw1.co.uk/uploads/images/gallery/2026-02/proxy.png)

<details id="bkmrk-proxy-host-detail"><summary>Proxy Host Detail</summary>

<table border="1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 50%;"></col><col style="width: 50%;"></col></colgroup><tbody><tr><td>[![Screenshot 2026-02-14 at 21.12.11.png](https://bookstack.notflix.pknw1.co.uk/uploads/images/gallery/2026-02/scaled-1680-/screenshot-2026-02-14-at-21-12-11.png)](https://bookstack.notflix.pknw1.co.uk/uploads/images/gallery/2026-02/screenshot-2026-02-14-at-21-12-11.png)</td><td>[![proxy2.png](https://bookstack.notflix.pknw1.co.uk/uploads/images/gallery/2026-02/scaled-1680-/proxy2.png)](https://bookstack.notflix.pknw1.co.uk/uploads/images/gallery/2026-02/proxy2.png)</td></tr></tbody></table>

</details>```
name: core-proxymanager
services:
  proxymanager:
    image: jc21/nginx-proxy-manager:latest #pknw1/jc21_nginx-proxy-manager:160725 #jc21/nginx-proxy-manager:latest
    restart: unless-stopped
    ports:
      - 149.202.72.112:80:80
      - 149.202.72.112:443:443
      - 149.202.72.112:25:25
      - 149.202.72.112:587:587
      - 100.100.69.2:82:81
      - 172.22.20.1:81:81
      - 172.22.20.1:80:80
    volumes:
      - ./config/data:/data
      - ./config/letsencrypt:/etc/letsencrypt
      - ./config/includes:/etc/nginx/conf.d/custom
      - ./config/error:/etc/nginx/error
        #- ./config/data/nginx/nginx.conf:/etc/nginx/nginx.conf
        #- ./config/data/override/conf.d/include:/etc/nginx/conf.d/include
        #- ./config/letsencrypt:/etc/letsencrypt
        #- /dev/shm/nginx:/var/cache/nginx
    container_name: proxymanager
    hostname: proxymanager
    networks:
      - proxy
      - admin
      - dmz
    environment:
      - DISABLE_IPV6=True
      - X_FRAME_OPTIONS=sameorigin
      - IP_RANGES_FETCH_ENABLED=False
      - VIRTUAL_HOST=proxymanager.uptime.pknw1.co.uk,proxymanager.admin.pknw1.co.uk
      - VIRTUAL_PORT=81
      - VIRTUAL_PROTO=http
    ulimits:
      nofile:
        soft: 65535
        hard: 65535
    healthcheck:
      test: ["CMD", "/usr/bin/check-health"]
      interval: 60s
      timeout: 30s


networks:
  admin:
    external: true

  proxy:
    external: true

  tailscale:
    external: true

  dmz:
    external: true
q
```

<table border="1" id="bkmrk-custom-error-pages%C2%A0-" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 36.8192%;"></col><col style="width: 63.1788%;"></col></colgroup><tbody><tr><td>custom error pages

custom advanced code snippets

</td><td>```
.
├── error
│   ├── 401.html
│   ├── 401_raw
│   ├── 402.html
│   ├── 503.html
│   ├── 503_raw
│   ├── bak
│   ├── blank.html
│   └── special.html
└──  includes
    ├── blockai.conf
    ├── buffering.conf
    ├── error_401.conf
    ├── error_402.conf
    ├── error_503.conf
    ├── error_blank.conf
    ├── robots.conf
    └── wp-exc.conf

```

  
</td></tr></tbody></table>

<table border="1" id="bkmrk-location-%5E%7E-%2Fadmin-%7B" style="border-collapse: collapse; width: 100%; height: 1445.4px;"><colgroup><col style="width: 26.5973%;"></col><col style="width: 73.4027%;"></col></colgroup><tbody><tr style="height: 29.8px;"><td style="height: 29.8px;"> </td><td style="height: 29.8px;">  
</td></tr><tr style="height: 181.4px;"><td style="height: 181.4px;">##### Custom response for HTTP Code

</td><td style="height: 181.4px;">```
error_page 400 401 402 403 404 405 408 426 =401 /_custom_blank.html;

location = /_custom_blank.html {
    internal;
    alias /etc/nginx/error/blank.html;
}

```

</td></tr><tr style="height: 143px;"><td style="height: 143px;">##### Robots.txt

</td><td style="height: 143px;">```
location = /robots.txt {
    add_header Content-Type text/plain;
    return 200 "User-agent: *\nDisallow: /\n";
}

```

</td></tr><tr style="height: 143px;"><td style="height: 143px;">##### Catch NastyURIs

</td><td style="height: 143px;">```
location ~ ^/(wp-[^/]*|[^/]+\.php)$ {
    access_log /data/logs/wp_php_catch.log;
    return 301 https://block.pknw1.co.uk;
}

```

</td></tr><tr style="height: 143px;"><td style="height: 143px;">##### Proxy Buffers

</td><td style="height: 143px;">```
proxy_buffers 32 1024k;
proxy_buffer_size 1024k;
proxy_busy_buffers_size 1024k;
proxy_max_temp_file_size 0;

```

</td></tr><tr style="height: 181.4px;"><td style="height: 181.4px;">##### BlockAI

</td><td style="height: 181.4px;">```
access_log /data/logs/blocked_ai.log;
error_log  /data/logs/blocked_ai.log warn;

if ($http_user_agent ~* "(wget|GPTBot|OAI-SearchBot|Googlebot|MJ12bot|Applebot|PetalBot|serpstatbot)") {
    return 301 https://block.pknw1.co.uk;
    #return 444;
}
```

</td></tr><tr style="height: 140.6px;"><td style="height: 140.6px;">##### URI starstwith action


</td><td style="height: 140.6px;">```
location ^~ /admin {
    return 301 /login;
}

```

  
</td></tr><tr style="height: 140.6px;"><td style="height: 140.6px;">##### URI is exactly

</td><td style="height: 140.6px;">```
location /ip {
    return 200 "$remote_addr | $http_x_forwarded_for\n";
}

```

  
</td></tr><tr style="height: 121.4px;"><td style="height: 121.4px;">##### Backend response code custom responses

</td><td style="height: 121.4px;">```
error_page 400 401 403 404 500 502 503 504 =301 https://dim.notflix.pknw1.co.uk;


```

  
</td></tr><tr style="height: 102.2px;"><td style="height: 102.2px;">##### Response search and replace

</td><td style="height: 102.2px;">```
sub_filter 'Welcome' 'PK';
sub_filter_once on;
```

  
</td></tr><tr style="height: 119px;"><td style="height: 119px;">##### Add headers to response

</td><td style="height: 119px;">```
more_set_headers 'Server: CuteKitten';

```

q

  
</td></tr></tbody></table>