내 Linux 서버의 포트 8080에서 실행되는 node.js 사이트가 있습니다. 또한 동일한 저장기에 포트 80에서 실행되는 PHP 사이트(bugzilla)가 있습니다. 따라서 현재 구성은 다음과 같습니다.
- http://example.com:8080(node.js 애플리케이션)
- http://example.com/bugzilla(버그질라 사이트)
다음과 같이 두 사이트를 포트 80에서 실행하고 싶습니다.
- http://example.com/mynodejs(node.js 애플리케이션)
- http://example.com/bugzilla(버그질라 사이트)
그게 가능합니까?
답변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
그리고 ProxyPass
및 ProxyPassReverse
라인을 사용하여 가상 호스트를 수정하십시오.
<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
.