Nginxについて何も知らなかったのでhello worldと簡単な説明。
Nginxとは
オープンソースのwebサーバ。
これだけではよくわからないので実際に使ってみて理解を深める。
やること
Nginxのインストール
$ sudo apt-get update
$ sudo apt-get install nginx
$ sudo ufw app list
$ sudo ufw allow 'Nginx Full'
$ sudo ufw allow 'Nginx HTTP'
$ sudo ufw allow 'Nginx HTTPS'
$ sudo ufw status
$ 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;
}
参考サイト
- Nginxをリバースプロキシで使う場合のCORS設定 – 箱のプログラミング日記。
- cors – How do I add Access-Control-Allow-Origin in NGINX? – Server Fault
iframe内で使えるように
location / {
proxy_hide_header x-frame-options;
}
終わりに
とりあえずの hello worldはできた。これから設定ファイルの書き方やディレクトリ構成がややこしそうなので、都度更新予定。
参考
- nginx – Wikipedia
- Nginxのアーキテクチャを理解する – Qiita
- ApacheとNginxについて比較 – Qiita
- Nginx Tutorial | Learn Nginx Fundamentals | Deploy a Web Application Using Nginx | Edureka – YouTube
- Nginxでまず静的ファイルのみ表示してみる(Nginxその2) | Snow Tree in June
- log_format in nginx.conf being ignored – Stack Overflow
- Nginxアクセスログのフォーマットにホスト名を入れてLogwatchにも対応させる
Comments