チャットを作りたい① Apacheとnginxの共存

スポンサーリンク
スポンサーリンク

チャットを作りたい

やり方は色んなのがあるみたいで、調べた中ではポーリングとかWebSocketとかがあった。で、WebSocketが良さげな感じがした。WebSocketの実装するにあたってどれがいいかなーと思って、例えばWikipedia見ると

WebSocket - Wikipedia

サーバー欄に色々書いてる。あとは「チャット 開発」とかでググったりすると色んなのが出てくる。その中でNode.jsっていうのがよさそうだったのでそれ使ってみたい。

なんだけど、Node.jsでアプリ作って実行すると、ターミナルが実行中のままになってCtrl+Cするまでずっとコマンド打てない感じになる。今このブログが置いてあるサーバーはCentOS+ApacheなんだけどApacheはそんなことない。起動したら裏で動いててくれて、ターミナルで他のことができる。そういう感じにしたい。できるのかなーと、どういう仕組なんだろうなーと、調べるとサービスとかデーモン化とかすると裏で動く感じになるみたい。Node.jsにはそれ用のライブラリがあって、foreverっていうらしい。それ使えばできそう。

あと、ApacheもNode.jsもサーバーの機能が被ることになる。競合して変ななりそうな気がする。かといって練習のためだけにまた新しく費用かけてインスタンス建てるのもなーと考えてた。これも調べていくとリバースプロキシっていうのがあって、リクエスト先によって、ApacheとNode.jsのどっちで処理するか振り分けるみたいなことができるらしい。でも難しそう・・・。で、リバースプロキシが得意なサーバーがあって、nginxという。nginxとApacheもリバースプロキシを使って共存ができるみたいで、Node.jsとも共存ができるらしい。ほほう。つまりReq→Nginx→Apache or Node.js(forever)っていう感じになれば、1つのサーバーで完結できそう。できるんですか?

頭の中ではこんな感じなのだが、じゃあこれをやれるのかと。とりあえずやってみよう。失敗したらブログも消えてさよならですね。

スポンサーリンク

ブログのバックアップを取る

ブログ消えるのヤなので、バックアップをとっとく。

All-in-One WP Migration and Backup
1クリックでサイトを移動、転送、コピー、移行、バックアップします。すばやくて簡単、高い信頼性。

時々このプラグインでバックアップを取っている。色んな更新が溜まってたので、それも適用してからローカルにダウンロードしといた。これで最悪全部ぶち消えても大丈夫だ。大丈夫だよね?

スポンサーリンク

NginxとApacheを共存させる

Nginxのリーバスプロキシ化(Apacheと共存) - Qiita
#やりたいことNginxでリーバスプロキシを動かして、Apacheに処理を任せる①アクセス → ②Nginx → ③Apache → ④処理を返す#リバースプロキシとは?一言で言うと、サーバ…
CentOSにNginxをApacheと同居させる - Qiita
前書きどうせならNginxをリバースプロキシとして立てて、静的なコンテンツは全部Nginx、動的なコンテンツはApacheにパス、みたいな構成をやりたかったので。セットアップ前準備衝突を避け…
301 Moved Permanently
nginxとApacheを連携させる(SSL)対応 | logw-ログウ個人的な記録用-
nginxとApacheの連携です。今回はPHPだけをApacheで返してます。IPは127.0.0.1になります。このままだと

などのいろんな記事を参考に、Nginxをインストールして設定してく。

準備

cloudflareを一時停止する

ResponceHeaderがcloudflareになってるのが

Server: Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips PHP/7.3.4になった。

Apacheを止める

$ systemctl stop httpd

で止まる。

Apacheのポート番号を変更

/etc/httpd/conf/httpd.confへ行き

Listen 80
を
Listen 8080

に変更。この番号は使ってないやつだったら何でもいいみたい。SSLはLet’s encryptを使ってるけどやり方がわからん。

https://t-tel.net/ssl/ssl061/
を見て
/etc/httpd/conf/httpd.confに
Listen 8443
を追記。

これダメだった。

/etc/httpd/conf/httpd-le-ssl.confの

<VirtualHost *:443>

<VirtualHost *:8443>
に変更した。

$ service httpd configtest

てすると

Syntax OK

は出る。で、試しに

$ systemctl start httpd

でサイトにアクセスしてみるとプライバシエラー。ただまぁ無視して突き進むと表示できた。(保護されていない通信って赤字は出る。)

うーむ、ちょっとよく分かんないのでとりあえず突き進もう。

$ systemctl stop httpd

でApache止める。

nginxインストール

普通にインストールしようとすると古いバージョンが入ってしまうそうなので、リポジトリを追加する。

/etc/yum.repos.d/に行って

$ vi nginx.repo

とか。でCentOS7.4なので

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1

こう。んで保存。そしたら

$ yum install nginx

確認。

$ nginx -V
nginx version: nginx/1.18.0

大丈夫そう。

$ systemctl start nginx

起動。

$ systemctl status nginx

チェック。

Active: active (running)

うむ。そんで

!http://dalomo.net/に行くと

表示された!けど

!https://dalomo.net/だと表示されない。。。まぁおっけおっけー。一応

$ systemctl enable nginx

で自動起動されるようにしとく。

$ systemctl restart httpd

でApache再起動。

nginxの設定ファイルを編集する

/etc/nginx/conf.d/に行って、default.confはリネームしちゃう。

$ mv default.conf default.conf.bak

そんで新たにファイル作る

$ vi reverse_proxy.conf

設定ファイルの書き方がいまいちわかんないなぁ、まず

server {
    listen 80;
    server_name localhost;

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_redirect off;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

だけ書いて保存。んでnginxを再起動

$ systemctl restart nginx

そしたら502 Bad Gatewayになる。。。うーん?

ここでちょっと席外してたらいつの間にかアクセスできるようになってた。なんだったんだろ。ただそれでもプライバシエラーは出るし、ResponceHeaderはApacheのままだ。ちょっとnginxのlogを見てみると

connect() to 127.0.0.1:8080 failed (13: Permission denied) while connecting to upstream

ってエラーが出てた。

CentOS7のnginxでポートフォワードできない時 - Qiita
CentOS7でポートフォワードしようとしたらちょっとハマったのでメモ。下記のように設定したNginxを動かしたserver {listen 80;server_name localhost…
nginx : Permission denied を解決 – エラーの向こうへ

を参考に

$ setsebool httpd_can_network_connect on -P

と打ったらエラーは出なくなった。でもサイトにアクセスしても特に変わりがない・・・。証明書がなんか変になってんのかなーと思った。まずはポート443の設定も追記してみる。

server {
    listen 443;
    ssl on;
    ssl_certificate /etc/letsencrypt/live/dalomo.net/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/dalomo.net/privkey.pem;
    server_name localhost;

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_redirect off;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

the "ssl" directive is deprecated, use the "listen ... ssl" directive instead in

て出たので

2. use the listen ... ssl directive instead - AWSのnginx を更新→ssl directive is deprecated
AWSのnginx を更新→ssl directive is deprecatedのホームページです。「2. use the listen ... ssl directive instead」についての内容が書かれているページです。

listen 443 ssl;
ssl on; #削除

した。

ちゃんと表示されるように頑張る

なんやかんやあってApacheが再起動できなくなった。調べてくと上で編集した

/etc/httpd/conf/httpd.confに

Listen 8443

じゃなくて、/etc/httpd/conf.d/ssl.confを編集するべきだったみたい。

上の追記を削除して

301 Moved Permanently

こちら参考に

Listen 443 https
→ Listen 8443 https
<VirtualHost _default_:443>
→ <VirtualHost _default_:8443>

こう変えたら起動した。ポート443がnginxと被ってたってわけだ。そんでアクセスしてみると

dalomo.net でリダイレクトが繰り返し行われました。
ERR_TOO_MANY_REDIRECTS

になった。これも上記ページを参考に

RewriteEngine on
RewriteCond %{SERVER_NAME} =dalomo.net [OR]
RewriteCond %{SERVER_NAME} =dalomo
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]

にしてたのをすべてコメントアウト。そしたら再起動を忘れずに

$ systemctl restart httpd
$ systemctl restart nginx

したらちゃんと表示された。

おー!ちゃんと表示されたわ!

ちゃんとnginxになってる!長かったぜ~

コメント

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