../ |
---|
CentOS Stream 8にNginx1.14をインストールしてみた。
80ポートはApache httpdがlistenしているので、Nginxは7080ポートをlistenするようにしたい。7080ポートは、空き状況をみてローカルに適当に決めた。httpdのVirtualHostから、特定のルート(/php)のときのみNginxに飛ばすようにしたい。現在、httpdはTomcatと連携してhttpsで利用しているため、Tomcatと共存できるようにしたい。
ネット情報では、nginx(80) --> httpd(8080) --> ajp(8009) --> tomcat(8443) の流れでの提示が多いが、既存のhttpdとTomcatを壊したくなかったので、以下のような流れにしてみる。
httpd(80) --> RewriteEngine(443) -->
if (特定のルート /php のとき){
nginx(7080)
} else {
ajp(8009) --> tomcat(8443)
}
Nginx1.14のインストール
Nginx1.14をインストールする。
$ dnf list nginx
nginx.x86_64 1:1.14.1-9.module_el8.0.0+1060+3ab382d3 @appstream
$ dnf install nginx
httpサービスを登録し、起動する。
$ firewall-cmd --list-all
$ firewall-cmd --add-service=http --permanent
$ firewall-cmd --reload
$ firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: eth0
sources:
services: cockpit dhcpv6-client http imap mysql pop3 smtp smtp-submission vnc-server
ports: 8080/tcp 8443/tcp 8009/tcp
protocols:
$ systemctl start http
$ systemctl status http
Nginxサービスは、初期状態で起動すると、80ポートがhttpdと衝突してエラーになる。
$ systemctl start nginx
$ systemctl status nginx
$ more /var/log/nginx/error.log
Nginxの設定を変更し、サービス起動する。80ポートではなく、7080ポートをlistenする。ルートには、作成したPHPを配置したディレクトリを指定する。
$ ls /etc/nginx
$ vi /etc/nginx/nginx.conf
server {
# listen 80 default_server;
listen 7080 default_server;
# listen [::]:80 default_server;
listen [::]:7080 default_server;
server_name _;
# root /usr/share/nginx/html;
root /opt/php74/webapps;
$ nginx -t
$ vi /etc/nginx/conf.d/php-fpm.conf
upstream php-fpm {
server unix:/run/php-fpm/www.sock;
}
$ vi /etc/php-fpm.d/www.conf
;user = apache
user = nginx
;group = apache
group = nginx
$ systemctl start php-fpm
$ systemctl enable php-fpm
$ systemctl start nginx
$ systemctl status nginx
httpdの設定変更
httpd.confを修正し、httpdを再起動する。私の環境では、VirtualHostで *:80 は *:443 にRewriteEngineで書き換えている。vhost-xxx-ssl.confのようなファイルに記述している。それを編集して、/phpが指定のときはNginx(7080)へ、その他のときはTomcat(8009)へ飛ぶように変更する。Tomcatのドキュメントルートは /opt/tomcat9/webapps/ にしている。Nginxのルートは /opt/php74/webapps/ にしてみた。
<VirtualHost *:80>
ServerName kankeri.com
...
RewriteEngine on
RewriteCond %{SERVER_NAME} =kankeri.com [OR]
RewriteCond %{SERVER_NAME} =www.kankeri.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
...
</VirtualHost>
<VirtualHost kankeri.com:443>
...
SSLProxyEngine On
ProxyRequests Off
ProxyPreserveHost On
ProxyPass /php http://localhost:7080/
ProxyPass / ajp://localhost:8009/
ProxyPassReverse /php/ http://localhost:7080/
SSLCertificateFile /etc/letsencrypt/live/kankeri.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/kankeri.com/privkey.pem
...
</VirtualHost>
以下のURLでアクセスすると、それぞれ、phpやjspが機能する。
http://kankeri.com/php/ --> /opt/php74/webapps/
http://kankeri.com/ --> /opt/tomcat9/webapps/
../ |
---|