2026年6月29日月曜日

Nginx インストール&設定

# systemctl stop httpd
# systemctl disable httpd
# dnf install -y nginx
# systemctl start nginx
# systemctl enable nginx
# firewall-cmd --permanent --add-service=http
# firewall-cmd --permanent --add-service=https
# firewall-cmd --reload
# vi /etc/nginx/conf.d/00_secureauth.conf  <<  __EOF__
server {
    listen 80;
    server_name your_domain_or_ip; # サーバーのIPアドレスまたはドメイン名

    # 1. Django (Gunicorn) へのルーティング
    location /api/ {
        proxy_pass http://192.168.1.198:8000;
        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. Djangoの静的ファイル (管理画面用など)
    location /static/ {
        alias /home/takahab/Make/DjangoNextAuth/backend/static/;
    }
    # 3. Next.js へのルーティング
    location / {
        proxy_pass http://192.168.1.198:3000;
        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;
    }
}
__EOF__

# nginx -t
# systemctl restart nginx
# setsebool -P httpd_can_network_connect 1

# systemctl restart nginx

【本番起動】

# PM2をグローバルにインストール
# npm install -g pm2

# Next.jsのプロジェクトディレクトリに移動
$ cd /home/takahab/Make/DjangoNextAuth/frontend

# PM2でNext.jsを起動(名前を "nextjs-app" とする)
$ pm2 start npm --name "nextjs-app" -- run start -- -p 3000

# サーバー起動時にPM2自体を自動起動するコマンドを生成
$ pm2 startup systemd

表示されたコマンドをコピペしてrootで実行。
# sudo env PATH=$PATH:/usr/local/bin /usr/local/lib/node_modules/pm2/bin/pm2 startup systemd -u takahab --hp /home/takahab
# su - takahab
$ pm2 save

$ pm2 start

$ cd /home/takahab/Make/DjangoNextAuth/backend
$ . ./env
$ pip install gunicorn
$ sudo vi /etc/systemd/system/gunicorn.service << __EOF__
[Unit]
Description=gunicorn daemon
After=network.target

[Service]
User=nginx
Group=nginx
WorkingDirectory=/var/www/DjangoNextAuth/backend
Environment="PYTHONPATH=/var/www/DjangoNextAuth/.venv/lib/python3.14/site-packages"
ExecStart=/usr/bin/python3.14 /var/www/DjangoNextAuth/.venv/bin/gunicorn \
          --workers 3 \
          --bind 127.0.0.1:8000 \
          Config.wsgi:application

[Install]
WantedBy=multi-user.target
__EOF__

# systemctl daemon-reload
# systemctl restart gunicorn
# systemctl status gunicorn


※Djangoでエラーの場合、
$ . ./env
手動で実行してエラーを確認。
$ ../.venv/bin/gunicorn --bind 127.0.0.1:8000 Config.wsgi:application

# semanage fcontext -a -t bin_t "/home/takahab/Make/DjangoNextAuth/\.venv/bin(/.*)?"
# semanage fcontext -a -t httpd_sys_content_t "/home/takahab/Make/DjangoNextAuth/backend(/.*)?"
restorecon -R -v /home/takahab/Make/DjangoNextAuth/

semanage fcontext -a -t bin_t "/home/takahab/Make/DjangoNextAuth/.venv/bin(/.*)?"



※Next.jsでエラーの場合。
$ pm2 delete all
$ pm2 start npm --name "nextjs-app" -- run start -- -p 3000
$ pm2 save

$ pm2 delete all
[PM2][WARN] No process found
(.venv) [takahab@rocky92 frontend]$ pm2 status
┌────┬───────────┬─────────────┬─────────┬─────────┬──────────┬────────┬──────┬───────────┬──────────┬──────────┬──────────┬──────────┐
│ id │ name      │ namespace   │ version │ mode    │ pid      │ uptime │ ↺    │ status    │ cpu      │ mem      │ user     │ watching │
└────┴───────────┴─────────────┴─────────┴─────────┴──────────┴────────┴──────┴───────────┴──────────┴──────────┴──────────┴──────────┘
host metrics | cpu: 2.5% | ram usage: 22.7% | enp5s0: ⇓ 0.005mb/s ⇑ 0.007mb/s drop 40/min | disk: ⇓ 0.014mb/s ⇑ 0.308mb/s /m2_2 75.67% /m2_1 65.91% /boot 61.14% |
(.venv) [takahab@rocky92 frontend]$ pm2 start npm --name "nextjs-app" -- run start -- -p 3000
[PM2] Starting /usr/local/bin/npm in fork_mode (1 instance)
[PM2] Done.
┌────┬───────────────┬─────────────┬─────────┬─────────┬──────────┬────────┬──────┬───────────┬──────────┬──────────┬──────────┬──────────┐
│ id │ name          │ namespace   │ version │ mode    │ pid      │ uptime │ ↺    │ status    │ cpu      │ mem      │ user     │ watching │
├────┼───────────────┼─────────────┼─────────┼─────────┼──────────┼────────┼──────┼───────────┼──────────┼──────────┼──────────┼──────────┤
│ 0  │ nextjs-app    │ default     │ N/A     │ fork    │ 71292    │ 0s     │ 0    │ online    │ 0%       │ 14.0mb   │ takahab  │ disabled │
└────┴───────────────┴─────────────┴─────────┴─────────┴──────────┴────────┴──────┴───────────┴──────────┴──────────┴──────────┴──────────┘
host metrics | cpu: 0.5% | ram usage: 22.6% | enp5s0: ⇓ 0.004mb/s ⇑ 0.006mb/s drop 44/min | disk: ⇓ 0mb/s ⇑ 0.602mb/s /m2_2 75.67% /m2_1 65.91% /boot 61.14% |
(.venv) [takahab@rocky92 frontend]$ pm2 save
[PM2] Saving current process list...
[PM2] Successfully saved in /home/takahab/.pm2/dump.pm2

 


sudo -u nginx pm2 logs nextjs-app --lines 50
vi /var/lib/nginx/.pm2/logs/nextjs-app-out.log
vi /var/lib/nginx/.pm2/logs/nextjs-app-error.log

$ pm2 kill
$ sudo -u nginx /usr/local/bin/pm2 kill


【ログローテート】
vi /etc/systemd/journald.conf<< __EOF__
SystemMaxUse=50M
__EOF__
systemctl restart systemd-journald

sudo -u nginx /usr/local/bin/pm2 install pm2-logrotate                            # 1. nginx ユーザーとして pm2-logrotate をインストール  
sudo -u nginx /usr/local/bin/pm2 set pm2-logrotate:max_size 10M    # 2. ログファイルの最大サイズを「10MB」に制限
sudo -u nginx /usr/local/bin/pm2 set pm2-logrotate:retain 10                                # 3. 過去何世代(何ファイル分)残すかを設定
sudo -u nginx /usr/local/bin/pm2 set pm2-logrotate:rotateInterval '0 0 * * *'   
# 4. ログを毎日深夜に強制ローテートする


【ローカルSSL】
mkdir -p /etc/nginx/ssl

cp /var/www/DjangoNextAuth/backend/Cert/localhost+2.pem /etc/nginx/ssl/server.crt
cp /var/www/DjangoNextAuth/backend/Cert/localhost+2-key.pem /etc/nginx/ssl/server.key

chmod 600 /etc/nginx/ssl/server.key
chown -R nginx:nginx /etc/nginx/ssl/

# vi /etc/nginx/conf.d/00_secureauth.conf<<__EOF__
# ==========================================
# 1. HTTP (80番ポート) の設定: HTTPS へ自動転送
# ==========================================
server {
    listen 80 default_server;
    listen [::]:80 default_server;
    server_name _;
    return 301 https://$host$request_uri; # すべて HTTPS へ強制リダイレクト
}

# ==========================================
# 2. HTTPS (443番ポート) の本番ルーティング設定
# ==========================================
server {
    listen 443 ssl default_server;
    listen [::]:443 ssl default_server;
    server_name _;

    # 💡 ローカルの SSL 証明書と秘密鍵を指定
    ssl_certificate /etc/nginx/ssl/server.crt;
    ssl_certificate_key /etc/nginx/ssl/server.key;

    # SSLのセキュリティ最適化設定(モダンな暗号化)
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;

    # ① Django API
    location /api/ {
        proxy_pass http://127.0.0.1:8000;
        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;
    }

    # ② Django ポータル
    location /portal/ {
        proxy_pass http://127.0.0.1:8000;
        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;
    }

    # ③ Django 管理画面
    location /admin/ {
        proxy_pass http://127.0.0.1:8000;
        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;
    }

    # ④ Djangoの静的ファイル
    location /static/ {
        alias /var/www/DjangoNextAuth/backend/static/;
    }

    # ⑤ それ以外すべてを Next.js へ
    location / {
        proxy_pass http://127.0.0.1:3000;
        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;
    }
}
__EOF__

firewall-cmd --permanent --add-service=https
firewall-cmd --reload

systemctl restart nginx










【現在の設定】

sudo vi /etc/nginx/nginx.conf

http {

    # --- ここから追記 MaxMaind ---
    #geoip2 /etc/nginx/geoip/GeoLite2-Country.mmdb {
    #    auto_reload 60m;
    #    $geoip2_data_country_code country iso_code;
    #}
    # 日本(JP)以外を「0(拒否)」にするルール
    #map $geoip2_data_country_code $allowed_country {
    #    default 0; # 日本以外はすべて0
    #    JP      1; # 日本国内IPは1
    #}
    # --- ここまで追記 - MaxMaind--

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 4096;
    proxy_headers_hash_max_size 1024;
    proxy_headers_hash_bucket_size 128;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

    server_tokens off;

    # Load modular configuration files from the /etc/nginx/conf.d directory.
    # See http://nginx.org/en/docs/ngx_core_module.html#include
    # for more information.
    include /etc/nginx/conf.d/*.conf;

#    server {
#        listen       80;
#        listen       [::]:80;
#        server_name  _;
#        root         /usr/share/nginx/html;
#
#        # Load configuration files for the default server block.
#        include /etc/nginx/default.d/*.conf;
#
#        error_page 404 /404.html;
#        location = /404.html {
#        }
#
#        error_page 500 502 503 504 /50x.html;
#        location = /50x.html {
#        }
#    }

# Settings for a TLS enabled server.
#
#    server {
#        listen       443 ssl http2;
#        listen       [::]:443 ssl http2;
#        server_name  _;
#        root         /usr/share/nginx/html;
#
#        ssl_certificate "/etc/pki/nginx/server.crt";
#        ssl_certificate_key "/etc/pki/nginx/private/server.key";
#        ssl_session_cache shared:SSL:1m;
#        ssl_session_timeout  10m;
#        ssl_ciphers PROFILE=SYSTEM;
#        ssl_prefer_server_ciphers on;
#
#        # Load configuration files for the default server block.
#        include /etc/nginx/default.d/*.conf;
#
#        error_page 404 /404.html;
#            location = /40x.html {
#        }
#
#        error_page 500 502 503 504 /50x.html;
#            location = /50x.html {
#        }
#    }

}




0 件のコメント:

コメントを投稿

Rocky Linux9.8 Docker インストール

# cat /etc/redhat-release Rocky Linux release 9.8 (Blue Onyx) # dnf remove docker docker-client  docker-client-latest  docker-common  docker...