ubuntu24.04 にnginx(1.24.0) をインストールし、Apacheと共存させました。
80ポートはApache,8080ポートはnginxに接続するようにしています。
●環境(インストール先)
VMwareWorkstationPro
ゲストOS Ubuntu24.04
ゲストOSには、WebサーバとしてApache2.4.58 が起動中(80ポートを占有)
●nginxのインストール
①ダウンロードと実行
次のコマンドを入力してnginxのダウンロードインストールを実行しました。
$ > sudo apt update
$ > sudo apt install nginx
続行しますか?[Y/n] y
:
インストールは成功しましたが、nginxは起動せず、ステータスを確認すると次のようなエラーが発生しています。
$ > systemctl status nginx
× nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; preset: en>
Active: failed (Result: exit-code) since Thu 2024-05-16 15:53:54 JST; 2 da>
Docs: man:nginx(8)
Process: 3952 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_proce>
Process: 3953 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (c>
CPU: 98ms
エラーメッセージから、
Active: failed から、起動に失敗していること
ExecStartPre=/usr/sbin/nginx のプロセスでエラーが発生していること
ExecStart=/usr/sbin/nginx のプロセスでエラーが発生していること
がわかりました。
今回インストールしたサーバには、あらかじめApacheがインストールされており、実行中ですので、ポートの競合が原因だと予測されます。
$ > sudo lsof -i :80
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
apache2 1392 root 4u IPv6 26787 0t0 TCP *:http (LISTEN)
apache2 4265 www-data 4u IPv6 26787 0t0 TCP *:http (LISTEN)
:
$ > sudo lsof -i :8080
#何も表示されません
80番ポートをApacheが占有しており、これがnginxの起動を阻害していることが確認できましたので、設定を変更します。
②設定の変更
nginx の定義ファイルの場所は次の場所にありました。
/etc/nginx/sites-available/default
$ > sudo nano /etc/nginx/sites-available/default
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
↓
server {
listen 8080 default_server;
listen [::]:8080 default_server;
root /var/www/nginx;
(3か所を変更、保存して終了)
nginx用のserver root用フォルダとして、
/var/www/nginx
フォルダを作り、パーミッションを644としました。
テスト用のhtmlとして、次のHTMLファイルを配置しておきます。(htmlもパーミッション644)
/var/www/nginx/index.html
<html><body>this is nginx!</body></html>
このHTMLが表示されれば、nginxサーバからのレスポンスだとわかります。
設定ファイルを編集し、テスト用HTMLファイルを配置して次のコマンドでnginxを再起動させました。
$ > sudo nginx -s reload # サーバの再起動
2024/05/19 11:10:21 [notice] 5001#5001: signal process started
2024/05/19 11:10:21 [error] 5001#5001: invalid PID number "" in "/run/nginx.pid"
# reloadだとエラーになりました
# フォルダ設定等を変えた場合等は一旦stopでサーバを止めた方がいいようです
$ > sudo systemctl stop nginx # nginxサーバの停止
$ > sudo rm -f /run/nginx.pid # 念のためプロセスの削除
$ > sudo nginx -t # 定義ファイルの書式チェック
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
$ > sudo systemctl start nginx # サーバの起動
# ちゃんと起動しているか確認
$ > sudo lsof -i :8080 # 8080ポートを使っているのは誰?
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nginx 5335 root 5u IPv4 48458 0t0 TCP *:http-alt (LISTEN)
nginx 5335 root 6u IPv6 48459 0t0 TCP *:http-alt (LISTEN)
これで8080ポートをnginxサーバに割り当てることができました。
③確認
Windowsから接続した様子
curlから接続した様子
●備忘録
■実行コマンド
$ > sudo systemctl start nginx # nginx 起動
$ > sudo systemctl stop nginx # nginx終了
$ > sudo systemctl restart nginx # nginx終了
$ > sudo tail -n 50 /var/log/nginx/error.log # エラーログ確認
$ > sudo tail -n 50 /var/log/nginx/access.log # アクセスログ確認
$ > nginx -v # バージョン確認
■環境
インストール先(デフォルト)
/etc/nginx
定義ファイル
/etc/nginx/sites-available/default
エラーログ
/var/log/nginx/error.log
アクセスログ
/var/log/nginx/access.log
アクセスログのフォーマットは、デフォルトだとApacheとほとんど同じようです
192.168.19.1 - - [19/May/2024:11:25:17 +0900] "GET / HTTP/1.1" 200 65 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36 Edg/124.0.0.0"
192.168.19.1 - - [19/May/2024:11:46:29 +0900] "GET / HTTP/1.1" 200 42 "-" "curl/8.4.0"