Limour

Limour

临床医学在读。

DockerでNginx Proxy Managerをデプロイする

Nginx Proxy Managerは、Docker イメージの事前構築されたもので、自宅や他の場所で実行しているウェブサイトを外部に転送し、無料の SSL 証明書を提供し、Nginx や Letsencrypt についてあまり知識がなくても簡単に設定できます。インターネットの普及により、このプロジェクトを使用すると、ウェブサイトの管理とデプロイがより便利になり、ウェブサイトのセキュリティも向上します。初心者でも経験豊富な開発者でも、このプロジェクトは便利な使用体験を提供します。

環境のセットアップ#

  • Dockerをインストールします。

Nginx Proxy Manager のデプロイ#

version: '3'
services:
  app:
    image: 'jc21/nginx-proxy-manager:latest'
    restart: unless-stopped
    ports:
      - '80:80'
      - '81:81'
      - '443:443'
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt
    
networks:
  default:
    external: true
    name: ngpm
sudo docker network create ngpm
mkdir -p ~/base/NGPM && cd ~/base/NGPM && nano docker-compose.yml
sudo docker-compose up -d
# http://ip:81にログインします
# Email: [email protected]
# Password: changeme
# Nginx Proxy Managerをリバースプロキシします

ワイルドカード証明書の申請#

  1. cloudflareの API トークンを取得します。
  2. API トークンテンプレートで「エリア DNS の編集」を選択します。
  3. dns_cloudflare_api_token をメモします。
  4. NGPM の管理ページに移動し、証明書を追加します。
    image
  5. DNS 検証を選択して証明書を追加し、dns_cloudflare_api_token を入力します。
    image

基本認証の追加#

  1. アクセスリストを追加します。
    image
  2. アカウントとパスワードを設定します。
    image
  3. 基本認証を設定します。
    image

サンプル:WordPress のリバースプロキシ#

version: '3.1'
services:
  wordpress:
    image: wordpress
    restart: always
    volumes:
      - ./www:/var/www/html
 
networks:
  default:
    external: true
    name: ngpm
mkdir -p ~/app/WordPress && cd ~/app/WordPress && nano docker-compose.yml
sudo docker-compose up -d
# リバースプロキシの書き方:serviceName:port

image

  • wp-content ディレクトリに移動します。
  • db.phpをダウンロードします(プロジェクトwp-sqlite-dbから取得)。
  • wp-config-sample.php を wp-config.php にリネームします。
  • nano ~/app/WordPress/www/wp-config.php を実行します。
  • saltにアクセスして、対応する salt を変更します。
  • 以下のコードを追加し、データベースの場所を変更します。
  • ウェブサイトにアクセスしてインストールを完了します。
define('DB_DIR', '/absolute/custom/path/to/directory/for/sqlite/database/file/');
define('DB_FILE', 'custom_filename_for_sqlite_database');
if(isset($_SERVER['HTTP_X_REAL_IP'])) {
    $list = explode(',',$_SERVER['HTTP_X_REAL_IP']);
    $_SERVER['REMOTE_ADDR'] = $list[0];
    $_SERVER['HTTPS']='on';   
    $_SERVER["SERVER_PORT"] = 443;
    define('WP_HOME', 'https://'.$_SERVER['HTTP_HOST']);
    define('WP_SITEURL', 'https://'.$_SERVER['HTTP_HOST']);
    define('WP_CONTENT_URL', 'https://'.$_SERVER['HTTP_HOST'].'/wp-content');
    define('FORCE_SSL_LOGIN', true);
    define('FORCE_SSL_ADMIN', true);
}

追加:プロキシテキストファイル#

location /hello.txt {
  alias /data/hello.txt;
}
location = /baidu_verify_codeva.html {
    return 200 abcde;
}

追加:プロキシ web-ui#

location / {
    gzip on;
    gzip_min_length 256;
    gzip_comp_level 6;
    gzip_types text/plain text/xml application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png application/vnd.ms-fontobject font/ttf font/opentype font/x-woff image/svg+xml;
    gzip_vary on;
    gzip_buffers 32 4k;
    root /data/web-ui;
    try_files $uri $uri.html $uri/index.html =404;
    error_page 404 /404.html;
}

追加:ランダム画像#

location = /randomImg {
	content_by_lua_block {
		local randomNumber = string.format("%02d", math.random(1, 10))
		local randomUrl = "https://img.limour.top/randImg/" .. randomNumber .. ".webp"
		ngx.status = 302
		ngx.header["Location"] = randomUrl
		ngx.exit(ngx.HTTP_MOVED_TEMPORARILY)
	}
}
location = /randomImg {
	content_by_lua_block {
		local redirectList = {
			"http://a.com",
			"http://b.com",
			"http://c.com"
		}
		local randomIndex = math.random(1, #redirectList)
		local randomUrl = redirectList[randomIndex]
		ngx.status = 302
		ngx.header["Location"] = randomUrl
		ngx.exit(ngx.HTTP_MOVED_TEMPORARILY)
	}
}

追加:ポートフォワード#

sudo apt install rinetd
sudo nano /etc/rinetd.conf
# フォーマット:[source_address] [source_port] [destination_address] [destination_port]
sudo rinetd
sudo systemctl status rinetd.service 
読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。