nginx のインストール

サーバ

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"