0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

CentOS Stream 8でNginxとTomcatを共存させる手順

Last updated at Posted at 2022-06-18
../

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/ にしてみた。

vhost-xxx.conf
<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>
vhost-xxx-ssl.conf
<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/
../
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?