Nginxなはずのエックスサーバーで.htaccessが有効な理由

エックスサーバーの公式ページを見ると、WebサーバーにNginxを採用したことで大量の同時アクセスに強いと書かれています。

Webサーバーに強い人はこれを見て、「じゃあ.htaccessを使えないんだな」と思った人も多いはず。
僕もそう思っていました。

ネットで紹介されているリダイレクト設定や、国外からの閲覧禁止などのアクセス制御方法は、ほとんどがhtaccessを使用することを前提としたものです。
しかしNginxは、.htaccessを使えません。

つまり何かしようと思っても、その情報のほとんどが役に立たないのです。
素人がNginxに手を出してはいけません。

ところがエックスサーバーのコントロールパネルを見ると…

『.htaccessの編集』機能がある!!

動作しないはずなのに、なぜあるのか?

疑問に感じたので、調べてみました。

エックスサーバーは本当にNginxなのか?

まずは本当にエックスサーバーはNginxで動作しているのか確認してみます。

コマンドプロンプトから、curlコマンドを実行します。

> curl -I https://ドメイン.com
HTTP/1.1 200 OK
Server: nginx
Date: Fri, 13 Sep 2019 06:30:15 GMT
Content-Type: text/html
Content-Length: 22345
Connection: keep-alive
Vary: Accept-Encoding
Last-Modified: Thu, 05 Sep 2019 09:16:27 GMT
ETag: "5749-591cac6c62844"
Cache-Control: max-age=10
Expires: Fri, 13 Sep 2019 06:30:25 GMT
Vary: User-Agent
Accept-Ranges: bytes

Server欄にnginxと表示されました。

次に、エックスサーバーにSSHでログインして、Nginxのプロセスを確認してみます。

$ ps ax | grep nginx
  1047 pts/0    S+     0:00 grep --color=auto nginx
 18291 ?        Ss     5:28 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
186113 ?        Sl     0:00 nginx: worker process
186114 ?        Sl     0:00 nginx: worker process
     ・
     ・
     ・
187400 ?        Sl     0:08 nginx: worker process
187433 ?        S      0:00 nginx: cache manager process

Nginxは一つのマスタープロセスと複数のワーカープロセスで処理されています。
cache managerは、保存したキャッシュが最大容量を超えていないかなどの状態を、定期的にチェックするプロセスです。

どうやらエックスサーバーでは、本当にNginxが動作しているようです。

エックスサーバーでApacheが起動している可能性

mixhostなどのLiteSpeed Webサーバーでも.htaccessを使用できますが、本家本元はApacheというWebサーバーです。

そこため、「もしかしたらエックスサーバーはApacheが動いているかもしれない」という仮説をたてることができます。

ということで、Apacheが動作していないかSSHでログインして確認してみます。

$ service httpd status
Redirecting to /bin/systemctl status httpd.service
● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
  Drop-In: /etc/systemd/system/httpd.service.d
           └─override.conf

どうやらエックスサーバーは、Apacheとnginxが共存しているようです。

ではWordPressは、Apacheとnginxのどちらが処理しているのかというと…

WordPressは、PHPというプログラム言語で動いています。
そこでphpinfo()というphpの情報をすべて表示するコマンド(関数)を使用した結果、次のように表示されました。

_SERVER["SERVER_SOFTWARE"]  Apache

SERVER_SOFTWAREは、Webサーバーのソフト名やバージョンをあらわします。

つまり、WordPressを動かしているPHPはApache上で動作しているということです。

そして、Nginxなはずのエックスサーバーで.htaccessが有効な理由は、裏でApacheが動いているからということでした。

まとめ

Nginx本来の性能を活かすなら、WordPressの処理もNginxでおこなう方が効率がいいです。

しかしサーバーのカスタマイズをネットで調べると.htaccessを変更することが前提となっていることがほとんどです。

レンタルサーバーは一般の人が使用するのが前提と考えると、.htaccessが使用できないのは、マイナス要素といえます。

そのため、Nginx+Apacheという環境が妥協点だったのかもしれませんね。