동일한 서버의 포트 80에 있는 Node.js 및 PHP

동일한 서버의 포트 80에 있는 Node.js 및 PHP

내 Linux 서버의 포트 8080에서 실행되는 node.js 사이트가 있습니다. 또한 동일한 저장기에 포트 80에서 실행되는 PHP 사이트(bugzilla)가 있습니다. 따라서 현재 구성은 다음과 같습니다.

다음과 같이 두 사이트를 포트 80에서 실행하고 싶습니다.

그게 가능합니까?

답변1

우선, 컴퓨터에서 두 서비스를 모두 비활성화하세요. 그런 다음 포트를 특이한 것으로 변경하고 다시 시작하십시오. 예를 들면 다음과 같습니다.

  • PHP 애플리케이션 사용 중6821

  • NodeJS 애플리케이션 사용6822

에서 여는 것을 잊지 마세요 127.0.0.1! 네트워크 인터페이스에서 열면 안 됩니다.


nginx가장 많이 사용되는 것으로 설치합니다 Reverse Proxy. 배포판에 따라 다음 명령 중 하나를 사용하여 설치할 수 있습니다.

Debian 기반 배포판의 경우:

$ sudo apt install nginx

Arch 기반 배포판의 경우:

$ sudo pacman -S nginx

배포판에 완전히 의존하므로 이 패키지는 자체 파일 계층을 가질 수 있습니다. 그래서 나는 당신에게 nginx.conf주요 구성 파일을 제공할 것입니다.다음과 같이 원하는 이름으로 원본 구성 파일을 복사하는 것을 잊지 마십시오. nginx.conf.origin

$ sudo cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.origin

이제 를 열고 /etc/nginx/nginx.conf기존 구성을 제거한 후 다음 구성을 그 안에 복사하세요.

user nginx;
worker_processes  1;

events {
    worker_connections  1024;
}

http {
    keepalive_timeout  15;

    server {
        listen       80 default_server;
        server_name  example.com; 

        location /mynodejs {
            proxy_pass http://127.0.0.1:6822;
        }

        location /bugzilla {
            proxy_pass http://127.0.0.1:6821;
        }
    }
}

주의 사항: 이 구성 파일은 제가 염두에 두고 작성했기 때문에 nginx를 실행할 때 오류가 발생할 수 있다는 점을 고려하세요. 그렇다면 여기에 댓글을 남겨주시면 테스트해보겠습니다.

이제 nginx를 다시 시작하세요! 당신은 당신이 원하는 것을 얻을 것입니다.

답변2

PHP 앱은 수정되지 않은 상태로 유지될 수 있습니다.

Apache를 웹서버로 사용하는 경우 프록시 모듈을 활성화해야 합니다. 예를 들어 우분투에서

a2enmod proxy
a2enmod proxy_http

그리고 ProxyPassProxyPassReverse라인을 사용하여 가상 호스트를 수정하십시오.

<VirtualHost *:80>
        ServerName www.example.com
        DocumentRoot "/var/www/www.example.com/htdocs"
        #nodejs app
        ProxyPass /mynodejs http://127.0.0.1:8080/
        ProxyPassReverse /mynodejs http://127.0.0.1:8080/
<Directory "/var/www/www.example.com/htdocs"> 
        Options -Indexes +FollowSymLinks
        AllowOverride All 
        Order allow,deny 
        Allow from all 
</Directory>
        ErrorLog "|/usr/bin/cronolog /var/www/www.example.com/logs/%Y-%m-%d/error_log" 
        CustomLog "|/usr/bin/cronolog /var/www/www.example.com/logs/%Y-%m-%d/access_log" combined 
</VirtualHost>

아파치를 다시 시작하십시오 /etc/init.d/apache2 restart.

관련 정보