nginxとは
nginxはロシアのIgor Sysoev氏によって開発されているWebサーバ兼リバースプロキシのソフトウェア。 - 静的なコンテンツを提供するWebサーバ 動的なコンテンツはnginx単体では提供できない。Webアプリケーションサーバと連携することにより動的コンテンツを提供する。
Webアプリケーションとの連携
nginxではWebアプリケーションを(apacheのmod_phpやmod_wsgiのように)Webサーバ自体に組み込んで動作させることはできないため、WebアプリケーションをFastCGIやSCGIやuWSGIに対応したアプリケーションサーバ上で動作させて、ネットワークあるいはUNIXドメインソケットを経由して利用する。
※Webアプリケーションとの連携についても性能向上のために以下のような機能がある。
キャッシュ:Webアプリケーションサーバから取得したコンテンツをキャッシュできる。
memcached:Webアプリケーション側でコンテンツをmemcachedにキャッシュさせることができるときには、nginxはmemcachedからコンテンツを読み出すことができる。
ロードバランサ:ロードバランサとしての機能を持っており、複数のアプリケーションサーバを利用して負荷を分散することができる。利用できなくなったアプリケーションサーバを自動的に外すこともできる。リバースプロキシ
プロキシとは:「代理」という意味であり、内部ネットワークからインターネットに接続する際に中継の役割を担うサーバーのことで、「プロキシサーバー」とも呼ばれる。
リバースプロキシとは:外部インターネットからサーバーへアクセスされる通信を中継する仕組みを指す。プロキシと比較すると、インターネットへ接続する方向が逆(リバース)になるため、リバースプロキシと呼ばれる。
参考: nginx連載1回目: nginxの紹介 - インフラエンジニアway - Powered by HEARTBEATS
pumaとは
railsを動かすためのサーバ。
Webサーバの役割もかねることができブラウザからのリクエストを元にリスポンスも返すことができる。
railsでデフォルトで設定されているサーバ。
$ rails s
で動くサーバはpumaということ。 PumaはWebサーバとしての機能を兼ねることもできるが、通常の本番運用ではPumaはアプリケーションサーバとしての機能に特化させて、NginxやApache等のWebサーバと連携させた構成にすることが多い。
設定していく
$ sudo vim /etc/nginx/nginx.conf
を書き換える
http { ## # Basic Settings ## sendfile on; tcp_nopush on; types_hash_max_size 2048; # server_tokens off; # server_names_hash_bucket_size 64; # server_name_in_redirect off; include /etc/nginx/mime.types; default_type application/octet-stream; ## # SSL Settings ## ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE ssl_prefer_server_ciphers on; ## # Logging Settings ## access_log /var/log/nginx/access.log; ## # Gzip Settings ## gzip on; # gzip_vary on; # gzip_proxied any; # gzip_comp_level 6; # gzip_buffers 16 8k; # gzip_http_version 1.1; # gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; ## # Virtual Host Configs ## include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; ---------serverを追加----------------------------- server { listen 0.0.0.0:80; # server-name location / { proxy_pass http://127.0.0.1:80; } } ----------------------------------------------------- }
書き換えたら一度$ sudo systemctl reload nginx :nginxをリロードする
↓
エラー$ sudo nginx -t
configをtestするためのコマンド(りろーどできなかったから詳しいエラーを確認した)
$ sudo nginx -t 2023/09/09 11:25:09 [emerg] 27850#27850: invalid URL prefix in /etc/nginx/nginx.conf:66
※原因はconfを書き換えた際にスペルミスをしていた(http//:になってしまっていた)
- 再度
$ sudo systemctl reload nginx
したら大丈夫だった。 $ sudo nginx -t
でもう一度確認
$ sudo nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
解決 - サーバを起動してブラウザから確認しようとしたらエラーだった。
- accesslogの見方
/var/log/nginx/access.log;
実行したが何も入っていなかったので
$ sudo cat /var/log/nginx/error.log
確認。 →情報なしcurlコマンドで同じパソコンから繋げたら大丈夫だった。
$ curl ik1-343-31774.vs.sakura.ne.jp <!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> <style> html { color-scheme: light dark; } body { width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; } </style> </head> <body> <h1>Welcome to nginx!</h1> <p>If you see this page, the nginx web server is successfully installed and working. Further configuration is required.</p> <p>For online documentation and support please refer to <a href="http://nginx.org/">nginx.org</a>.<br/> Commercial support is available at <a href="http://nginx.com/">nginx.com</a>.</p> <p><em>Thank you for using nginx.</em></p> </body> </html>
- 違うパソコンからターミナルでつないでみる。
curl -v ik1-343-31774.vs.sakura.ne.jp * Trying 153.126.215.28:80...
↑さくらVPSのIPアドレスと同じ(VPSのコントローラーからログインし確認)
- nginxのファイヤーウォールの設定をしてみる。
$ sudo apt-get install ufw
$ sudo ufw app list
を実行しすでに設定されているアプリケーション構成を一覧表示
$ sudo ufw app list Available applications: AIM Bonjour CIFS DNS Deluge IMAP IMAPS IPP KTorrent Kerberos Admin Kerberos Full Kerberos KDC Kerberos Password LDAP LDAPS LPD MSN MSN SSL Mail submission NFS Nginx Full Nginx HTTP Nginx HTTPS OpenSSH POP3 POP3S PeopleNearby SMTP SSH Socks Telnet Transmission Transparent Proxy VNC WWW WWW Cache WWW Full WWW Secure XMPP Yahoo qBittorrent svnserve
Nginx Full:このプロファイルは、Nginx のポート 80 と 443 の両方を開く。
Nginx HTTP:このプロファイルは、Nginx のポート 80 のみを開く。
Nginx HTTPS: このプロファイルは、Nginx のポート 443 のみを開く。
今回はNginx Fullをポート 80および443 で HTTP トラフィックを許可する設定にするので以下のコマンドを実行する。
~$ sudo ufw allow 'Nginx Full' [sudo] password for debian: Rules updated Rules updated (v6)
$ sudo ufw status
コマンド実行し、HTTP がファイアウォールを通過できることを確認
$ sudo ufw status Status: inactive
activeになればいいがinactive(非活性)となりエラー。
$ sudo ufw allow 22 Rules updated Rules updated (v6)
$ sudo ufw enable
コマンドでufwを起動(有効化)
$ sudo ufw enable Command may disrupt existing ssh connections. Proceed with operation (y|n)? y Firewall is active and enabled on system startup
$ sudo ufe status
で状態を確認
$ sudo ufw status Status: active To Action From -- ------ ---- Nginx Full ALLOW Anywhere 22 ALLOW Anywhere Nginx Full (v6) ALLOW Anywhere (v6) 22 (v6) ALLOW Anywhere (v6)
activeとなっているのでOK。
$ curl -v 〇〇.vs.sakura.ne.jp
コマンドでもう一台のパソコンで確認してみる。
まだできない(´;ω;`)さくらVPSのコントロールパネル内の「パケットフィルター設定」→「パケットフィルター設定」をクリック→「パケットフィルター設定を追加」をクリック→「Web」を追加する。
ほかのPCのブラウザで確認。
大丈夫そう!!!!!まずは
$ sudo ufw disable
コマンドで停止する$ sudo ufw status
コマンドでinactive(非活性状態)になっているか確認。$ sudo apt-get remove ufw
を実行しアンインストールほかのPCのブラウザで再度確認。
ufwの設定は必要なかったらしいということが分かった。
次回へ続きます🔥