Skip to content

alexm-27/nginx-proxy-manager-Bash-API

Β 
Β 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Nginx Proxy Manager CLI Script

Table of Contents

  1. Description
  2. Reference API
  3. Prerequisites
  4. Installation
  5. Settings
  6. Usage
  7. Options
  8. Examples
  9. Screens
  10. TODO

Warning

The --restore command is disabled (a fix is in progress).

Description

πŸ› οΈ This BASH script enables the management of Nginx Proxy Manager through its API.

πŸ”‘ Automatically generates and manages tokens, ensuring their validity, so you don't have to worry about token expiration.

βš™οΈ Provides functionalities such as creating and deleting proxy hosts, managing users, displaying configurations, creating BACKUPS, and more.

French description:

Ce script permet de gΓ©rer Nginx Proxy Manager via l'API. Il fournit des fonctionnalitΓ©s telles que la crΓ©ation de hosts proxy, la gestion des utilisateurs, et l'affichage des configurations avec creation de BACKUP ! La fonction RESTORE n'est pas encore terminΓ©e.

Reference

https://github.com/NginxProxyManager/nginx-proxy-manager/tree/develop/backend/schema

Prerequisites

And of course the excellent NPM (Nginx Proxy Manager)

Required basic dependencies.

The script will automatically check if they are installed and will download them if necessary:

  • curl
  • jq

Installation

wget https://raw.githubusercontent.com/Erreur32/nginx-proxy-manager-API/main/nginx_proxy_manager_cli.sh chmod +x nginx_proxy_manager_cli.sh # Check script ./nginx_proxy_manager_cli.sh --info 

Note

With the new V2.0.0, some command arguments have been changed to be simpler, and need to set BASE_DIR variable to store Tokens and Backups.

Settings

Important

(Optional) You can create a configuration file named nginx_proxy_manager_cli.conf with these 4 required variables.

To ensure the script is functional, edit these 4 variables (mandatory).

## Nginx proxy IP address (your Nginx IP) NGINX_IP="127.0.0.1" ## Existing user (user and password) on NPM API_USER="existingUser@mail.com" API_PASS="password" # Path to store .txt files and Backups BASE_DIR="/path/nginx_proxy_script/data" 

Usage

./nginx_proxy_manager_cli.sh [OPTIONS] ./nginx_proxy_manager_cli.sh --info ./nginx_proxy_manager_cli.sh --show-default 

Options

 🌐 Host proxy creation: -d DOMAIN_NAMES Domain name (required for creating/updating hosts) -i FORWARD_HOST IP address or domain name of the target server (required for creating/updating hosts) -p FORWARD_PORT Port of the target server (required for creating/updating hosts) -f FORWARD_SCHEME Scheme for forwarding (http/https, default: http) -c CACHING_ENABLED Enable caching (true/false, default: false) -b BLOCK_EXPLOITS Block exploits (true/false, default: true) -w ALLOW_WEBSOCKET_UPGRADE Allow WebSocket upgrade (true/false, default: true) -l CUSTOM_LOCATIONS Custom locations (JSON array of location objects) -a ADVANCED_CONFIG Advanced configuration (block of configuration settings) πŸ“¦ Backup and Restore: --backup Backup all configurations to a file --backup-host id Backup a single host configuration and its certificate (if exists) πŸ”§ Miscellaneous: # --check-token Check if the current token is valid # --create-user user pass email Create a user with a username, password and email # --delete-user username Delete a user by username # --host-delete id Delete a proxy host by ID # --host-show id Show full details for a specific host by ID # --show-default Show default settings for creating hosts # --host-list List the names of all proxy hosts # --host-list-full List all proxy hosts with full details # --host-list-users List all users # --host-search hostname Search for a proxy host by domain name # --host-enable id Enable a proxy host by ID # --host-disable id Disable a proxy host by ID # --host-ssl-enable id Enable SSL, HTTP/2, and HSTS for a proxy host # --host-ssl-disable id Disable SSL, HTTP/2, and HSTS for a proxy host # --list-ssl-certificates List All SSL certificates availables (JSON) # --generate-cert domain email Generate certificate for the given domain and email # --delete-cert domain Delete certificate for the given domain # --help Display this help 

Examples

 πŸ“¦ Backup First ! ./nginx_proxy_manager_cli.sh --backup 🌐 Host Creation: ./nginx_proxy_manager_cli.sh -d example.com -i 192.168.1.10 -p 8080 (check default values below) ./nginx_proxy_manager_cli.sh --info ./nginx_proxy_manager_cli.sh --show-default ./nginx_proxy_manager_cli.sh --create-user newuser password123 user@example.com ./nginx_proxy_manager_cli.sh --delete-user 'username' ./nginx_proxy_manager_cli.sh --host-list ./nginx_proxy_manager_cli.sh --host-ssl-enable 10 πŸ”§ Advanced Example: ./nginx_proxy_manager_cli.sh -d example.com -i 192.168.1.10 -p 8080 -a 'proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;' πŸ›‘οΈ Custom Certificate: ./nginx_proxy_manager_cli.sh --generate-cert example.com user@example.com πŸ›‘οΈ Custom locations: ./nginx_proxy_manager_cli.sh -d example.com -i 192.168.1.10 -p 8080 -l '[{"path":"/api","forward_host":"192.168.1.11","forward_port":8081}]' πŸ”– Full options: ./nginx_proxy_manager_cli.sh -d example.com -i 192.168.1.10 -p 8080 -f https -c true -b true -w true -a 'proxy_set_header X-Real-IP $remote_addr;' -l '[{"path":"/api","forward_host":"192.168.1.11","forward_port":8081}]' 
Verifying the Configuration
Info

Some info of settings in the script with ./nginx_proxy_manager_cli_.sh --info

./nginx_proxy_manager_cli_.sh --info Script Info: 2.3.5 Script Variables Information: BASE_URL http://127.0.0.1:81/api NGINX_IP 127.0.0.1 API_USER user@monmail.com BASE_DIR /path/to/nginx_proxy BACKUP_DIR /path/to/nginx_proxy/backups BACKUP HOST 40 Token NPM /path/to/nginx_proxy/token/token_127.0.0.1.txt 

How to activate SSL ?

By following these steps, you can enable SSL for your proxy host for the first time using Let's Encrypt.

List

List all Host in one command and show Β΄idΒ΄ , Β΄statusΒ΄ and Β΄SSLΒ΄ status:

./nginx_proxy_manager_cli.sh --host-list πŸ‘‰ List of proxy hosts (simple) ID Domain Status SSL 1 toto.fun enabled ✘ 2 titi.fun disable βœ… 3 tutu.fun enabled βœ… 
SSL

Enable SSL for the Host:

Assuming the host ID is 1, you would enable SSL for the host as follows:

./nginx_proxy_manager_cli.sh --host-ssl-enable 1 

SSl is enable successfully, check again with --host-list

 ./nginx_proxy_manager_cli.sh --host-list πŸ‘‰ List of proxy hosts (simple) ID Domain Status SSL 1 toto.fun enabled βœ… 2 titi.fun disable βœ… 3 tutu.fun enabled βœ… 

Et VoilΓ .

Other Exemple command:

Host proxy info command --host-show id

 ./nginx_proxy_manager_cli_.sh --host-show 1 βœ… Nginx url: http://127.0.0.1:81/api βœ… The token is valid. Expiry: 2025-07-12T08:14:58.521Z πŸ‘‰ Full details for proxy host ID: 59... { "id": 10, "created_on": "2024-07-11 13:16:34", "modified_on": "2024-07-13 09:42:40", "owner_user_id": 1, "domain_names": [ "test.domain.com" ], "forward_host": "127.0.0.1", "forward_port": 80, "access_list_id": 0, "certificate_id": 81, "ssl_forced": 1, "caching_enabled": 0, "block_exploits": 1, "advanced_config": "", "meta": { "letsencrypt_agree": true, "letsencrypt_email": "", "nginx_online": true, "nginx_err": null }, "allow_websocket_upgrade": 1, "http2_support": 1, "forward_scheme": "http", "enabled": 1, "locations": [], "hsts_enabled": 1, "hsts_subdomains": 0 } 

Screens:

# ./nginx_proxy_manager_cli.sh --backup βœ… Users backup completed πŸ†—: /path/to/nginx_proxy/backups/users_127_0_0_1_2024_07_29__14_01_23.json βœ… Settings backup completed πŸ†—: /path/to/nginx_proxy/backups/settings_127_0_0_1_2024_07_29__14_01_23.json βœ… Proxy host backup completed πŸ†—: /path/to/nginx_proxy/backups βœ… Access lists backup completed πŸ†—: /path/to/nginx_proxy/backups/access_lists_127_0_0_1_2024_07_29__14_01_23.json βœ… Backup πŸ†— πŸ“¦ Backup Summary: - Number of users backed up: 1 - Number of proxy hosts backed up: 31 - Total number of backup files: 42 

https://github.com/Erreur32/nginx-proxy-manager-API/blob/main/screen-nginx-proxy-default.png

TODO:

  • add setting for ADVANCED configuration in npm location / { ... }
  • Add documentation on certain functions
  • ADD: a configuration function for Custom Locations
  • Backup all settings from NPM
  • Domain TLS check validity
  • Better Error Handeling
  • Restore Function need to be optimized

About

This BASH script enables the management of Nginx Proxy Manager through its API.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Shell 100.0%