杜郎俊赏 - dujun.io

开源实例之Nginx

前言

本篇是对《开源实例之多项目部署方案》中 Nginx 部分的展开。

Nginx的介绍

nginx [engine x] is an HTTP and reverse proxy server, a mail proxy server, and a generic TCP/UDP proxy server, originally written by Igor Sysoev.

Nginx 是轻量级的 HTTP 和反向代理 WEB 服务器。它资源占用少、高并发能力强,在互联网项目中广泛应用。Nginx 也就是常说的 LNMP 架构中的 N。

Nginx的应用

本系列的开源项目实例容器,由 Nginx 协助完成自动重建功能。主要利用的特性是,容器未创建或已停止时,HTTP 状态码返回 502,由此做重建分发。

以 WordPress 项目为例:

分发流程

访问落地页时,如果容器正在运行则正常展示;如果容器未运行,则跳至分发页创建容器,然后回跳至落地页。

分发配置

upstream webman {
    server 127.0.0.1:8787;
    keepalive 10240;
}

server {
    listen 80;
    listen 443 ssl http2;
    server_name example.dujun.space;

    location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $host;
        proxy_http_version 1.1;
        proxy_set_header Connection "";
        if (!-f $request_filename) {
            proxy_pass http://webman;
        }
    }

    ssl_certificate /root/.acme.sh/dujun.space/fullchain.cer;
    ssl_certificate_key /root/.acme.sh/dujun.space/dujun.space.key;
    ssl_trusted_certificate /root/.acme.sh/dujun.space/ca.cer;
}

项目配置

server {
    listen 80;
    listen 443 ssl http2;

    server_name wordpress.dujun.space;

    error_page 502 = https://example.dujun.space/of/wordpress;

    add_header 'Access-Control-Allow-Origin' '*';
    add_header 'Access-Control-Allow-Credentials' 'true';
    add_header 'Access-Control-Allow-Methods' 'GET';

    location / {
        proxy_pass http://127.0.0.1:10111;
        proxy_set_header Host $http_host;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
        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 REMOTE-HOST $remote_addr;
        proxy_redirect default;
    }

    ssl_certificate /root/.acme.sh/dujun.space/fullchain.cer;
    ssl_certificate_key /root/.acme.sh/dujun.space/dujun.space.key;
    ssl_trusted_certificate /root/.acme.sh/dujun.space/ca.cer;
}

后记

体验更多开源实例

标签: 开源实例
日期:2022-12-09