็†ฑ้–€ๅˆ†้กž
 ่ผ‰ๅ…ฅไธญ…
็›ฎ้Œ„

๐Ÿง Linux Nginx ๅๅ‘ไปฃ็†ๅฏฆๆˆฐ:HTTPS、่ฒ ่ผ‰ๅนณ่กก่ˆ‡ๅพŒ็ซฏๆœๅ‹™ๆ•ดๅˆ

    ๐Ÿง Linux Nginx ๅๅ‘ไปฃ็†ๅฏฆๆˆฐ:HTTPS、่ฒ ่ผ‰ๅนณ่กก่ˆ‡ๅพŒ็ซฏๆœๅ‹™ๆ•ดๅˆ

    ๅœจ็พไปฃ็š„็ถฒ็ซ™่ˆ‡ๆœๅ‹™ๆžถๆง‹ไธญ,Nginx ๅๅ‘ไปฃ็†(Reverse Proxy) ๅนพไนŽๆ˜ฏๆจ™ๆบ–้…ๅ‚™。 ไธ่ซ–ๆ˜ฏ่ฆ็ตฑไธ€็ฎก็† HTTPS ๆ†‘่ญ‰、ๅœจๅคšๅฐๅพŒ็ซฏไน‹้–“ๅš่ฒ ่ผ‰ๅนณ่กก、ๆˆ–ๅฐ‡ๅคš็จฎๆœๅ‹™ๆ•ดๅˆๅœจๅŒไธ€ๅ€‹็ถฒๅŸŸๅบ•ไธ‹, Nginx ้ƒฝ่ƒฝ็”จ็ฐกๆฝ”็š„่จญๅฎšๅฎŒๆˆ。

    ๆœฌ็ฏ‡ไปฅ Linux ็’ฐๅขƒ็‚บไธป,ๅพžๆฆ‚ๅฟตๅˆฐๅฏฆๆˆฐ้…็ฝฎ,ๅฎŒๆ•ดไป‹็ดน:

    • ไป€้บผๆ˜ฏ「ๅๅ‘ไปฃ็†」?่ˆ‡「ๆญฃๅ‘ไปฃ็†」ๆœ‰ไป€้บผไธๅŒ?
    • ๅฆ‚ไฝ•ๅœจ Linux ๅฎ‰่ฃ่ˆ‡ๅ•Ÿ็”จ Nginx
    • ไฝฟ็”จ Nginx ๅปบ็ซ‹ HTTP/HTTPS ๅๅ‘ไปฃ็†
    • ๆ•ดๅˆ Let's Encrypt ่‡ชๅ‹•็ฐฝ็™ผๅ…่ฒปๆ†‘่ญ‰
    • ๅคšๅฐๅพŒ็ซฏๆœๅ‹™็š„่ฒ ่ผ‰ๅนณ่กก่จญๅฎš
    • ่™•็† WebSocket、REST API ็ญ‰็‰นๆฎŠๆƒ…ๅขƒ
    • ๅธธ่ฆ‹ๅ•้กŒ่ˆ‡้™ค้ŒฏๆŠ€ๅทง

    ไธ€、ๅๅ‘ไปฃ็†ๆ˜ฏไป€้บผ?่ˆ‡ๆญฃๅ‘ไปฃ็†็š„ๅทฎๅˆฅ

    1. ๆญฃๅ‘ไปฃ็†(Forward Proxy)

    ๆญฃๅ‘ไปฃ็†ๆ˜ฏ「็ซ™ๅœจ็”จๆˆถ้€™ไธ€ๅด」็š„ไปฃ็†ไผบๆœๅ™จ:

    • ็”จๆˆถ็›ดๆŽฅ้€ฃ็ทšๅˆฐ Proxy,ๅ†็”ฑ Proxy ๆ›ฟ็”จๆˆถๅ‘็ถฒ่ทฏไธŠ็š„็ถฒ็ซ™็™ผๅ‡บ่ซ‹ๆฑ‚。
    • ๅธธ่ฆ‹็”จ้€”:ๅ…ฌๅธๅ…ง้ƒจไธŠ็ถฒๆŽง็ฎก、็ฟป็‰† Proxy、ๅฟซๅ–ๅค–้ƒจ็ถฒ็ซ™็ญ‰。

    2. ๅๅ‘ไปฃ็†(Reverse Proxy)

    ๅๅ‘ไปฃ็†ๅ‰‡ๆ˜ฏ「็ซ™ๅœจไผบๆœๅ™จ้€™ไธ€ๅด」:

    • ๅค–้ƒจ็”จๆˆถๅช็œ‹ๅˆฐๅๅ‘ไปฃ็†็š„ IP / ็ถฒๅŸŸ。
    • ๅๅ‘ไปฃ็†ๅ†ๆ นๆ“š่ทฏๅพ‘、Host、Header ็ญ‰ๆขไปถ,ๆŠŠ่ซ‹ๆฑ‚่ฝ‰็™ผ็ตฆๅ…ง้ƒจ็š„ๅพŒ็ซฏๆœๅ‹™。
    • ็”จๆˆถๅฎŒๅ…จไธ้œ€่ฆ็Ÿฅ้“ๅพŒ็ซฏๆœๅ‹™็œŸๆญฃ็š„ IP ๆˆ– Port。

    ๅๅ‘ไปฃ็†ๅธธ่ฆ‹็”จ้€”ๅŒ…ๆ‹ฌ:

    • ้›†ไธญ็ฎก็† HTTPS(็ตฑไธ€็ต‚็ต TLS,ๅพŒ็ซฏ่ตฐ HTTP)。
    • ๅคšๅฐๅพŒ็ซฏๆœๅ‹™็š„่ฒ ่ผ‰ๅนณ่กก(Load Balancing)。
    • ๅฐ‡ๅคšๅ€‹ๆ‡‰็”จ(API、ๅ‰็ซฏ、ๅพŒๅฐ)ๆ•ดๅˆๅœจๅŒไธ€ๅ€‹็ถฒๅŸŸไธ‹。
    • ไฝœ็‚บ็ฌฌไธ€ๅฑค้˜ฒ็ทš:้™ๅˆถไพ†ๆบ IP、Rate Limit、ๅŸบๆœฌ WAF ่ฆๅ‰‡็ญ‰。

    ไบŒ、ๅœจ Linux ไธŠๅฎ‰่ฃ่ˆ‡ๅ•Ÿๅ‹• Nginx

    ไปฅไธ‹็คบไพ‹ไปฅ Debian/Ubuntu ่ˆ‡ RHEL/CentOS ็‚บไธป,ๅ…ถๅฎƒ็™ผ่กŒ็‰ˆๅฏๅฐๆ‡‰ๅ„่‡ช็š„ๅฅ—ไปถ็ฎก็†ๅทฅๅ…ท。

    1. Debian / Ubuntu

    sudo apt update
    sudo apt install -y nginx
    
    # ๅ•Ÿๅ‹•่ˆ‡่จญๅฎš้–‹ๆฉŸ่‡ชๅ‹•ๅ•Ÿๅ‹•
    sudo systemctl enable --now nginx
    
    # ๆชขๆŸฅๆœๅ‹™็‹€ๆ…‹
    sudo systemctl status nginx

    2. RHEL / CentOS / Rocky / AlmaLinux

    sudo dnf install -y nginx   # ่ˆŠ็‰ˆๅฏ็”จ yum
    sudo systemctl enable --now nginx
    sudo systemctl status nginx

    ๅฎ‰่ฃๅพŒ,ๅฆ‚ๆžœ้˜ฒ็ซ็‰†ๆœ‰ๅ•Ÿ็”จ,่จ˜ๅพ—ๆ‰“้–‹ HTTP/HTTPS:

    # ไปฅ firewalld ็‚บไพ‹
    sudo firewall-cmd --permanent --add-service=http
    sudo firewall-cmd --permanent --add-service=https
    sudo firewall-cmd --reload

    ็€่ฆฝๅ™จๆ‰“้–‹ http://ไผบๆœๅ™จIP,ๆ‡‰่ฉฒๅฐฑๆœƒ็œ‹ๅˆฐ Nginx ็š„้ ่จญๆญก่ฟŽ้ ้ข。


    ไธ‰、ๅŸบๆœฌ Nginx ็ตๆง‹่ˆ‡่จญๅฎšๆช”ไฝ็ฝฎ

    ๅธธ่ฆ‹็š„ Nginx ็›ฎ้Œ„็ตๆง‹(ไปฅ Debian/Ubuntu ็‚บไพ‹):

    • /etc/nginx/nginx.conf:ไธป่จญๅฎšๆช”,ๆœƒ include ๅ…ถไป– conf。
    • /etc/nginx/sites-available/:ๅ„็ซ™ๅฐ่จญๅฎš(่™›ๆ“ฌไธปๆฉŸ)。
    • /etc/nginx/sites-enabled/:ๅฏฆ้š›ๅ•Ÿ็”จ็š„็ซ™ๅฐ่จญๅฎš(ๅคš็”จ symlink)。
    • /var/www/:้ ่จญ็ถฒ็ซ™ๆ น็›ฎ้Œ„。
    • /var/log/nginx/access.logerror.log:ๅญ˜ๆ”พๅญ˜ๅ–่ˆ‡้Œฏ่ชค็ด€้Œ„。

    ๆธฌ่ฉฆ Nginx ่จญๅฎšๆช”ๆ˜ฏๅฆๆญฃ็ขบ:

    sudo nginx -t       # ๆชขๆŸฅ่ชžๆณ•
    sudo systemctl reload nginx    # ๅนณๆป‘้‡ๆ–ฐ่ผ‰ๅ…ฅ่จญๅฎš

    ๅ››、HTTP ๅๅ‘ไปฃ็†ๅŸบๆœฌ็ฏ„ไพ‹

    ๆƒ…ๅขƒ:Nginx ๅฐๅค–้–‹ๆ”พ 80 port,ๅพŒ็ซฏๆœ‰ไธ€ๅ€‹่ท‘ๅœจ 127.0.0.1:8080 ็š„ Web ๆ‡‰็”จ็จ‹ๅผ。

    1. ๅปบ็ซ‹็ซ™ๅฐ่จญๅฎšๆช”

    ๅœจ /etc/nginx/sites-available/myapp.conf ๅปบ็ซ‹:

    server {
        listen 80;
        server_name example.com;
    
        # ๅฏ้ธๆ“‡่จ˜้Œ„ๅฐˆ็”จ log
        access_log /var/log/nginx/myapp_access.log;
        error_log  /var/log/nginx/myapp_error.log;
    
        location / {
            proxy_pass http://127.0.0.1:8080;
    
            # ไฟ็•™็œŸๅฏฆ Client IP ่ˆ‡ Host
            proxy_set_header Host $host;
            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;
        }
    }

    2. ๅ•Ÿ็”จ็ซ™ๅฐ

    # ๅปบ็ซ‹ symlink ๅ•Ÿ็”จ
    sudo ln -s /etc/nginx/sites-available/myapp.conf /etc/nginx/sites-enabled/
    
    # ๆธฌ่ฉฆ่จญๅฎšไธฆ้‡ๆ–ฐ่ผ‰ๅ…ฅ
    sudo nginx -t
    sudo systemctl reload nginx

    ไน‹ๅพŒไฝฟ็”จ่€…ๅช่ฆ้€ฃๅˆฐ http://example.com,ๅฏฆ้š›ไธŠๅฐฑๆ˜ฏ็”ฑ Nginx ๆ›ฟไป–้€ฃๅˆฐ 127.0.0.1:8080


    ไบ”、HTTPS ่ˆ‡ๆ†‘่ญ‰็ฎก็†:ๅๅ‘ไปฃ็†ไฝœ็‚บ TLS ็ต‚็ต้ปž

    ็พไปฃ็ถฒ็ซ™ๅนพไนŽ้ƒฝ่ฆๆฑ‚ไฝฟ็”จ HTTPS,ๅŠ ไธŠ็€่ฆฝๅ™จไนŸๆœƒๅฐ HTTP ้กฏ็คบ「ไธๅฎ‰ๅ…จ」่ญฆๅ‘Š。 ๆœ€ๅ…ธๅž‹ๅšๆณ•ๆ˜ฏ่ฎ“ Nginx ่ฒ ่ฒฌ TLS ็ต‚็ต(Terminating TLS),ๅพŒ็ซฏ็ถญๆŒ HTTP, ๅฆ‚ๆญคๅฏ้›†ไธญ็ฎก็†ๆ†‘่ญ‰、ๆธ›ๅฐ‘ๅพŒ็ซฏ่ฒ ๆ“”。

    1. ไฝฟ็”จ Let's Encrypt + Certbot ่‡ชๅ‹•็ฐฝ็™ผๆ†‘่ญ‰

    # Debian / Ubuntu
    sudo apt install -y certbot python3-certbot-nginx
    
    # ้€้Ž Nginx ๅค–ๆŽ›่‡ชๅ‹•่จญๅฎš HTTPS
    sudo certbot --nginx -d example.com -d www.example.com

    Certbot ๆœƒ่‡ชๅ‹•ๅนซไฝ :

    • ่ˆ‡ Let's Encrypt ACME ไผบๆœๅ™จๆบ้€š。
    • ็ฐฝ็™ผๆ†‘่ญ‰ไธฆๅญ˜ๆ”พๅˆฐ /etc/letsencrypt
    • ไฟฎๆ”นๅฐๆ‡‰็š„ Nginx server ๅ€ๅกŠ,ๅŠ ๅ…ฅ listen 443 ssl; ็ญ‰่จญๅฎš。
    • ๅŠ ๅ…ฅๆŽ’็จ‹(systemd timer)่‡ชๅ‹•็บŒ็ด„。

    ๆˆๅŠŸๅพŒ่จญๅฎšๆช”ๆœƒ้•ทๅพ—ๅƒ้€™ๆจฃ(็ฐกๅŒ–็‰ˆ):

    server {
        listen 80;
        server_name example.com www.example.com;
        return 301 https://$host$request_uri;
    }
    
    server {
        listen 443 ssl http2;
        server_name example.com www.example.com;
    
        ssl_certificate     /etc/letsencrypt/live/example.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    
        location / {
            proxy_pass http://127.0.0.1:8080;
            proxy_set_header Host $host;
            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;
        }
    }

    ไธŠ้ขไนŸ็คบ็ฏ„ไบ†ไธ€ๅ€‹ๅธธ่ฆ‹ๅšๆณ•:ๆ‰€ๆœ‰ HTTP 80 ้€ฃ็ทšไธ€ๅพ‹ 301 ่ฝ‰ๅˆฐ HTTPS


    ๅ…ญ、ๅคš็ซ™ๅฐๆ•ดๅˆ:ๅŒไธ€ๅฐ Nginx ไปฃ็†ๅคšๅ€‹ๅพŒ็ซฏๆœๅ‹™

    ๅœจๅฏฆๅ‹™ไธญ,ๅธธๅธธๆœƒ้‡ๅˆฐไธ€ๅฐไธปๆฉŸไธŠ่ท‘ๅพˆๅคšๆœๅ‹™,ไพ‹ๅฆ‚:

    • ๅ‰็ซฏ็ถฒ็ซ™ https://www.example.com
    • API ไผบๆœๅ™จ https://api.example.com
    • ๅพŒๅฐ็ฎก็†ไป‹้ข https://admin.example.com

    1. ไพ「็ถฒๅŸŸ」ๅˆ†ๆต(vhost)

    ๅฏไปฅ็‚บไธๅŒ็š„ Host ๅปบ็ซ‹ไธๅŒ server ๅ€ๅกŠ:

    # ๅ‰็ซฏ
    server {
        listen 443 ssl http2;
        server_name www.example.com;
    
        ssl_certificate     /etc/letsencrypt/live/www.example.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/www.example.com/privkey.pem;
    
        location / {
            proxy_pass http://127.0.0.1:3000;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }
    }
    
    # API
    server {
        listen 443 ssl http2;
        server_name api.example.com;
    
        ssl_certificate     /etc/letsencrypt/live/api.example.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/api.example.com/privkey.pem;
    
        location / {
            proxy_pass http://127.0.0.1:8000;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }
    }

    2. ไพ「่ทฏๅพ‘」ๅˆ†ๆต

    ่‹ฅๅชๆƒณไฝฟ็”จๅŒไธ€ๅ€‹็ถฒๅŸŸ,ไนŸๅฏไปฅไพ็…ง URL ่ทฏๅพ‘่ฝ‰็™ผ:

    server {
        listen 443 ssl http2;
        server_name example.com;
    
        # /api/* ่ฝ‰็ตฆๅพŒ็ซฏ API ไผบๆœๅ™จ
        location /api/ {
            proxy_pass http://127.0.0.1:8000/;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }
    
        # /admin/* ่ฝ‰็ตฆๅพŒๅฐ
        location /admin/ {
            proxy_pass http://127.0.0.1:9000/;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }
    
        # ๅ…ถไป–่ทฏๅพ‘็•ถไฝœๅ‰็ซฏ็ถฒ็ซ™
        location / {
            proxy_pass http://127.0.0.1:3000/;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }
    }

    ๆณจๆ„ proxy_pass ๅพŒ้ข็š„「ๅฐพ็ซฏๆ–œ็ทš」ๆœ‰่ชžๆ„ๅทฎ็•ฐ,ๆœƒๅฝฑ้Ÿฟๅฏฆ้š›่ฝ‰็™ผ็š„่ทฏๅพ‘。 ไธ€่ˆฌๆƒ…ๆณไธ‹,ๅปบ่ญฐ「location ไปฅ / ็ตๅฐพ,proxy_pass ไนŸไปฅ / ็ตๅฐพ」,ไฟๆŒไธ€่‡ด่ผƒไธๆ˜“ๆททไบ‚。


    ไธƒ、่ฒ ่ผ‰ๅนณ่กก:ๅคšๅฐๅพŒ็ซฏๆœๅ‹™ๅˆ†ๆต

    ็•ถๅ–ฎๅฐๅพŒ็ซฏๆœๅ‹™ๆ‰ฟๅ—ไธไบ†ๆต้‡ๆ™‚,ๅฐฑๅฏไปฅๅœจ Nginx ๅ‰้ขๅŠ ๅ…ฅ่ฒ ่ผ‰ๅนณ่กกๆฉŸๅˆถ, ๅฐ‡่ซ‹ๆฑ‚ๅˆ†ๆ•ฃๅˆฐๅคšๅฐๅพŒ็ซฏไผบๆœๅ™จ。

    1. ่จญๅฎš upstream ๅ€ๅกŠ

    ๅœจ /etc/nginx/nginx.conf ๆˆ–็จ็ซ‹ conf ่ฃกๅฎš็พฉ:

    upstream myapp_backend {
        # ้ ่จญๆ˜ฏ round-robin
        server 10.0.0.11:8080;
        server 10.0.0.12:8080;
    
        # ๅฏไปฅ่จญ่จˆๆฌŠ้‡,ไพ‹ๅฆ‚:
        # server 10.0.0.11:8080 weight=2;
        # server 10.0.0.12:8080 weight=1;
    }

    2. ๅœจ server ๅ€ๅกŠไธญไฝฟ็”จ upstream

    server {
        listen 443 ssl http2;
        server_name app.example.com;
    
        ssl_certificate     /etc/letsencrypt/live/app.example.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/app.example.com/privkey.pem;
    
        location / {
            proxy_pass http://myapp_backend;
            proxy_set_header Host $host;
            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;
        }
    }

    3. ๅธธ่ฆ‹่ฒ ่ผ‰ๅนณ่กก็ญ–็•ฅ

    • round-robin(้ ่จญ):่ซ‹ๆฑ‚่ผชๆตๅˆ†้…ๅˆฐๅ„ๅพŒ็ซฏ。
    • least_conn:ๅ„ชๅ…ˆๅˆ†้…็ตฆ็›ฎๅ‰้€ฃ็ทšๆ•ธๆœ€ๅฐ‘็š„ๅพŒ็ซฏ。
    • ip_hash:็”ฑ Client IP ๆฑบๅฎš่ฆ้€ฃๅˆฐๅ“ชไธ€ๅฐ,็”จๆ–ผ้œ€่ฆ「ๆœƒ่ฉฑ้ป่‘—(sticky)」็š„ๆœๅ‹™。

    ไพ‹ๅฆ‚:

    upstream myapp_backend {
        least_conn;
        server 10.0.0.11:8080;
        server 10.0.0.12:8080;
    }

    ๅ…ซ、็‰นๆฎŠๆƒ…ๅขƒ:WebSocket ่ˆ‡้•ท้€ฃ็ทšๆœๅ‹™

    ไธ€ไบ›็พไปฃ Web ๆ‡‰็”จๆœƒไฝฟ็”จ WebSocket(ไพ‹ๅฆ‚ๅณๆ™‚่Šๅคฉ、ๅณๆ™‚็›ฃๆŽง), ๆˆ–ๆ˜ฏ้œ€่ฆ้•ทๆ™‚้–“ไฟๆŒ้€ฃ็ทš็š„ SSE(Server-Sent Events)。้€™้กžๆƒ…ๆณ้œ€่ฆ่ชฟๆ•ดไธ€ไบ› proxy ็›ธ้—œๅƒๆ•ธ。

    1. WebSocket ๅๅ‘ไปฃ็†็คบไพ‹

    location /ws/ {
        proxy_pass http://127.0.0.1:7000;
    
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }

    2. ่ชฟๆ•ด Timeout,้ฟๅ…้•ท้€ฃ็ทš่ขซ้Žๆ—ฉๅˆ‡ๆ–ท

    proxy_read_timeout 3600;
    proxy_send_timeout 3600;

    ๅฏฆ้š›ๅ€ผๅฏไพๆœๅ‹™็‰นๆ€ง่ชฟๆ•ด,้ฟๅ…้Ž็Ÿญ้€ ๆˆ้€ฃ็ทš้ ป็น้‡ๅปบ,้Ž้•ทๅ‰‡ๅฏ่ƒฝๆตช่ฒป่ณ‡ๆบ。


    ไน、ๅฎ‰ๅ…จๅผทๅŒ–่ˆ‡ๆœ€ไฝณๅฏฆๅ‹™

    ๅๅ‘ไปฃ็†ๆ“บๅœจๆœ€ๅ‰้ข,่‡ช็„ถไนŸๆ˜ฏ็ฌฌไธ€ๅฑคๅฎ‰ๅ…จ้˜ฒ็ทš,ๅปบ่ญฐ้…ๅˆไปฅไธ‹ๅšๆณ•:

    1. ๅƒ…้–‹ๆ”พๅฟ…่ฆ Port

    • ๅฐๅค–ๅช้–‹ 80/443,ๅพŒ็ซฏๆœๅ‹™ๅช่ฝ localhost ๆˆ–ๅ…ง็ถฒ IP。
    • ้…ๅˆ Linux ้˜ฒ็ซ็‰†(iptables / nftables / firewalld)้™ๅˆถไพ†ๆบ。

    2. ๅšดๆ ผ HTTP Header ่ˆ‡ๅคงๅฐ้™ๅˆถ

    # ้™ๅˆถ่ซ‹ๆฑ‚้ซ”ๅคงๅฐ,้ฟๅ…่ขซๆ‹ฟไพ†ไธŠๅ‚ณ่ถ…ๅคงๆช”ๆกˆ
    client_max_body_size 10m;
    
    # ๅŠ ๅ…ฅๅฎ‰ๅ…จ็›ธ้—œ Header(ๅฏไพๆƒ…ๆณ่ชฟๆ•ด)
    add_header X-Frame-Options SAMEORIGIN;
    add_header X-Content-Type-Options nosniff;
    add_header X-XSS-Protection "1; mode=block";

    3. ไฝฟ็”จ HTTP/2 ่ˆ‡ TLS ๅผทๅŒ–่จญๅฎš

    ๅœจ listen ่กŒๅŠ ไธŠ http2,ไธฆๆŽก็”จ่ผƒๆ–ฐ็š„ TLS ็‰ˆๆœฌ่ˆ‡ Cipher。

    4. ๆญ้… Fail2Ban ๆˆ– WAF

    ๅฏ้€้Ž log pattern ๆญ Fail2Ban ้€ฒ่กŒ็ฐกๆ˜“้˜ฒ็ฆฆ,ๆˆ–ๅฐŽๅ…ฅๅฆ‚ ModSecurity ็ญ‰ WAF ่งฃๆฑบๆ–นๆกˆ, ๅฐ‡ๆƒกๆ„่กŒ็‚บๆ“‹ๅœจๅๅ‘ไปฃ็†้€™ไธ€ๅฑค。


    ๅ、ๅธธ่ฆ‹ๅ•้กŒ่ˆ‡้™ค้ŒฏๆŠ€ๅทง

    1. 502 Bad Gateway / 504 Gateway Timeout

    ไปฃ่กจ Nginx ่ˆ‡ๅพŒ็ซฏๆœๅ‹™้–“็š„ๆบ้€šๆœ‰ๅ•้กŒ,ๆŽ’ๆŸฅๆ–นๅ‘ๅŒ…ๆ‹ฌ:

    • ๅพŒ็ซฏๆœๅ‹™ๆ˜ฏๅฆๆœ‰ๅ•Ÿๅ‹•?Port ๆ˜ฏๅฆๆญฃ็ขบ?
    • Nginx ๆ˜ฏๅฆ่ƒฝ้€ฃๅˆฐๅพŒ็ซฏ IP(้˜ฒ็ซ็‰†、SELinux、ๅฎนๅ™จ็ถฒ่ทฏ…)。
    • ่ถ…ๆ™‚่จญๅฎšๆ˜ฏๅฆ้Ž็Ÿญ(proxy_read_timeout)。

    2. ้œๆ…‹ๆช”ๆกˆ่ทฏๅพ‘้Œฏไบ‚ / ้‡่ค‡็š„่ทฏๅพ‘ๅ‰็ถด

    ้€šๅธธ่ˆ‡ location ่ˆ‡ proxy_pass ็š„ๅฐพๆ–œ็ทšๆœ‰้—œ。 ่‹ฅ้‡ๅˆฐๅ•้กŒ,ๅปบ่ญฐๅ…ˆ็ฐกๅŒ–่จญๅฎš,ๅช่™•็† / ่ทฏๅพ‘,ๅ†้€ๆญฅๆ‹†ๅ‡บ /api、/admin ็ญ‰ๅญ่ทฏๅพ‘。

    3. ็œŸๅฏฆ IP ๆฒ’ๆœ‰ๅ‡บ็พๅœจๅพŒ็ซฏ Log

    ็ขบ่ชๆ˜ฏๅฆๆœ‰่จญๅฎš:

    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    ไธฆๅœจๅพŒ็ซฏ Web Server(ไพ‹ๅฆ‚ Apache、Node.js ๆ‡‰็”จ)ไธญ่จญๅฎšไฝฟ็”จๆญค Header, ๅ–ไปฃ็›ดๆŽฅ่ฎ€ๅ– remote_addr。

    4. ่จญๅฎšไฟฎๆ”นๅพŒๅปๆฒ’ๆœ‰็”Ÿๆ•ˆ

    • ๆ˜ฏๅฆๆœ‰ๅฐ‡็ซ™ๅฐ conf ๆ”พๅˆฐ sites-enabled(ๆˆ– include ็š„็›ฎ้Œ„)?
    • ไฟฎๆ”นๅพŒๆ˜ฏๅฆๆœ‰ๅŸท่กŒ nginx -t ่ˆ‡ systemctl reload nginx
    • ๆ˜ฏๅฆๆœ‰ๅคšๅ€‹็›ธๅŒ server_name ็š„ server ๅ€ๅกŠไบ’็›ธ่ก็ช?

    ๅไธ€、ๆ•ด็†่ˆ‡ๅปถไผธ:ๆŠŠ Nginx ่ฎŠๆˆไฝ ็š„「็ตฑไธ€ๅ…ฅๅฃ」

    ๅพžๅฏฆๅ‹™่ง’ๅบฆไพ†็œ‹,Nginx ๅๅ‘ไปฃ็†ๅฏไปฅๅนซไฝ ๅšๅˆฐ:

    • ๅฐๅค–ๅช้–‹ไธ€็ต„ IP / ็ถฒๅŸŸ,ๅ…ง้ƒจๆœๅ‹™ๅฎŒๅ…จ่—ๅœจๅพŒ้ข。
    • ้›†ไธญ็ฎก็† HTTPS ๆ†‘่ญ‰(ๅฐคๅ…ถๆญ้… Let's Encrypt ้žๅธธๆ–นไพฟ)。
    • ๅœจๅคšๅฐๅพŒ็ซฏไน‹้–“ๅˆ†ๆ•ฃๆต้‡,ไธฆ็ฐกๅŒ–ๆ“ดๅ……ๆต็จ‹。
    • ้–‹ๅง‹ๅฐŽๅ…ฅๆ›ด้€ฒ้šŽ็š„ DevOps ๆžถๆง‹,ไพ‹ๅฆ‚ๅฎนๅ™จๅŒ–、ๅพฎๆœๅ‹™、Kubernetes ็ญ‰。

    ็•ถไฝ ๆŠŠๅธธ็”จ็š„ๅๅ‘ไปฃ็†้…็ฝฎๆ•ด็†ๆˆ ๆจ™ๆบ–ๆจกๆฟ ไน‹ๅพŒ, ไธ่ซ–ๆ˜ฏๆ–ฐๅฐˆๆกˆไธŠ็ทš、ๆœๅ‹™ๆฌ้ท、ๆˆ–่‡จๆ™‚ๅขžๅŠ ๆธฌ่ฉฆ็’ฐๅขƒ, ๅช่ฆ่ค‡่ฃฝไธ€ไปฝ conf、่ชฟๆ•ดๅนพๅ€‹ๅƒๆ•ธ,ๅฐฑ่ƒฝๅฟซ้€ŸๅฎŒๆˆ。

    ✅ ๅปบ่ญฐไธ‹ไธ€ๆญฅๅฏไปฅๆญ้…:

    • Linux ้˜ฒ็ซ็‰†่ˆ‡ Fail2Ban(้™ๅˆถไพ†ๆบ / ้€ฃ็ทšๆฌกๆ•ธ)。
    • ไฝฟ็”จ Prometheus + Grafana ็›ฃๆŽง Nginx ่ˆ‡ๅพŒ็ซฏๆœๅ‹™็‹€ๆ…‹。
    • ๅฐ‡ Nginx ๅๅ‘ไปฃ็†่ˆ‡ Docker / Proxmox ็’ฐๅขƒๆ•ดๅˆ,ไฝœ็‚บๆ•ดๅ€‹ๅ…ง็ถฒๆœๅ‹™็š„「ๅ…ฅๅฃ้–˜้“」。
    ๐Ÿ”— ๅˆ†ไบซ้€™็ฏ‡ LINE Facebook X

    ๆฒ’ๆœ‰็•™่จ€:

    ๅผต่ฒผ็•™่จ€

    ๅญ—็ดš