Skip to main content

Nginx Proxy Manager

 

nginxproxy.png

External IP: 149.202.72.112

via OVH Control Panel (kp93246-ovh)

 

TailScale IP: 100.100.69.2 via Tailscale Admin Panel (pkswansea@outlook.com)

 

OVH DNS pknw1.co.uk

*.pknw1.co.uk > 149.202.72.112

*.admin.pknw1.co.uk -> 100.100.69.2

Ingress3.png

proxy.png

Proxy Host Detail
Screenshot 2026-02-14 at 21.12.11.png proxy2.png

 

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

custom error pages 

custom advanced code snippets

.
├── 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

 
Custom response for HTTP Code
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;
}
Robots.txt
location = /robots.txt {
    add_header Content-Type text/plain;
    return 200 "User-agent: *\nDisallow: /\n";
}
Catch NastyURIs
location ~ ^/(wp-[^/]*|[^/]+\.php)$ {
    access_log /data/logs/wp_php_catch.log;
    return 301 https://block.pknw1.co.uk;
}
Proxy Buffers
proxy_buffers 32 1024k;
proxy_buffer_size 1024k;
proxy_busy_buffers_size 1024k;
proxy_max_temp_file_size 0;
BlockAI
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;
}
URI starstwith action
location ^~ /admin {
    return 301 /login;
}

URI is exactly
location /ip {
    return 200 "$remote_addr | $http_x_forwarded_for\n";
}

Backend response code custom responses
error_page 400 401 403 404 500 502 503 504 =301 https://dim.notflix.pknw1.co.uk;


Response search and replace
sub_filter 'Welcome' 'PK';
sub_filter_once on;

Add headers to response
more_set_headers 'Server: CuteKitten';

q