Hello Nginx

Nginxについて何も知らなかったのでhello worldと簡単な説明。

Nginxとは

オープンソースのwebサーバ

これだけではよくわからないので実際に使ってみて理解を深める。

やること

Nginxのインストール

  1. $ sudo apt-get update
  2. $ sudo apt-get install nginx
  3. $ sudo ufw app list
  4. $ sudo ufw allow 'Nginx Full'
  5. $ sudo ufw allow 'Nginx HTTP'
  6. $ sudo ufw allow 'Nginx HTTPS'
  7. $ sudo ufw status
  8. $ sudo systemctl status nginx

コマンド

  • 起動: $ sudo service nginx start
  • テスト: $ nginx -t
  • ストップ: $ sudo service nginx stop
  • リスタート: $ sudo service nginx restart

最初の静的ファイルの変更

デフォルトでは /var/www/html/ にあるindex.htmlが指定されている。このファイルを書き換えることで好きなページを表示できる。

アクセスによって表示するファイルを切り替えるには設定ファイルの変更が必要。

設定ファイル

場所

/etc/nginx/

nginx.conf

最初に読み込まれる設定ファイル。ここでログの場所やアプリケーションごとの設定ファイルを読み込む。

sites-enabled/default

初期時の設定ファイル。nginx.confから呼ばれて、デフォルト(ポート80)で/var/www/html にアクセスするように設定されている。

conf.d/*

デフォルトではディレクトリだけあって中身のファイルは空だった。ここに設定ファイルを追加していく。nginx.confから参照する。

ログ出力

nginx.confファイルに書いてある。デフォルトでは

  • access_log: /var/log/nginx/access.log;
  • error_log: /var/log/nginx/error.log;

ログにホスト名を出力する

デフォルトではホスト名は出力されない。複数のドメインから同じサーバーにアクセスするときはホスト名があった方が便利。ホスト名を出力するときはnginx.confを以下のように変更する。ここではエラーログのフォーマットは変えない。

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

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

エラー (詰まったところ)

nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)

参考: 他のプロセスがポートを占有してnginxを再起動できない – Qiita

$ sudo lsof -i | grep nginx で表示される古いプロセスをkillする。

CORSを許可する

以下の5つの設定をしたらCORSが通るようになった。

location / {
        # CORS
        add_header Access-Control-Allow-Origin "*";
        add_header Access-Control-Allow-Methods "POST, GET, OPTIONS";
        add_header Access-Control-Allow-Headers "Origin, Authorization, Accept";
        add_header Access-Control-Allow-Credentials true;
        proxy_hide_header 'Access-Control-Allow-Origin';
        proxy_pass http://web:3000;
    }

参考サイト

iframe内で使えるように

location / {
    proxy_hide_header x-frame-options;
}

終わりに

とりあえずの hello worldはできた。これから設定ファイルの書き方やディレクトリ構成がややこしそうなので、都度更新予定。

参考

関連記事

Comments

タイトルとURLをコピーしました