在 CentOS 上使用 Apache 的 Proxy mode 使 Node.js 和 Apach

最近用 Node.js 開發一個微信公共平臺接口,因爲微信公衆平臺接口配置目前僅支持默認的 80 端口,而個人 CentOS 服務器已經在使用 Apache 運行一些其餘業務了。這樣就必需要求 Node.js 可以和 Apache 共用 80 端口。html

咱們可使用 Apache 的 Proxy mode 來解決這個問題。node

假設咱們提供給微信公共平臺接口配置的地址是:http://www.foobar.com/weixin/receivetoken。那麼咱們須要首先給 Apache 配置一個 vhost,域名就是 foobar.com;而後確認 Apache 加載了相應的 Proxy 模塊;使 Apache 從新加載配置文件,最後肯定一下咱們的 Node.js 應用要監聽的服務端口,好比 11342,啓動咱們的 Node.js 應用進行測試。那麼咱們經過以下幾步配置便可實現。shell

檢查 Apache 配置文件

首先找到並打開 Apache 的配置文件,檢查一下 Proxy 模塊是否已經被加載,比方在個人 CentOS 上配置文件的路徑是: /etc/httpd/conf/httpd.conf
apache

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so

新增一個 VHOST 配置

而後打開 vhost.conf 爲 foobar.com 新增一個 virtual host 配置,在個人 CentOS 上的路徑是:/etc/httpd/conf.d/vhost.conf 假設咱們須要和 Apache 共享 80 端口的 Node.js 應用目錄爲:/srv/www/foobar.com/public_html/weixin,咱們但願 Node.js 自己運行於 11342 端口。那麼咱們應該以下增長 vhost 配置:  瀏覽器

<VirtualHost *:80>
  ServerAdmin admin@gmail.com
  ServerName foobar.com
  ServerAlias www.foobar.com

  ProxyRequests off

  <Proxy *>
    Order deny,allow
    Allow from all
  </Proxy>

  <Location />
    ProxyPass http://localhost:11342/
    ProxyPassReverse http://localhost:11342/
  </Location>

  DocumentRoot /srv/www/foobar.com/public_html/weixin
  <Directory "/srv/www/foobar.com/public_html/weixin">
    AllowOverride All
  </Directory>

  ErrorLog /srv/www/foobar.com/logs/error.log
  CustomLog /srv/www/foobar.com/logs/access.log combined
</VirtualHost>


2014.01.14 批註:」allow,deny」 逗號後面不能有空格,不然 httpd 跟配置就匹配不上了,會報錯,啓動不了。服務器

從新加載 Apache 配置文件及測試

讓 Apache 從新加載一下咱們的配置:微信

service httpd reload微信公衆平臺

最後運行一下 Node.js 腳本,而後就能夠在瀏覽器中測試一下是否工做正常了。ide

注意:wordpress

  1. 上面咱們是以 CentOS 爲例說明 Apache 配置文件的路徑,以及相關命令;若是是其餘 Linux 的發行版本,按照相應平臺進行處理便可,重點仍是配置文件自己的內容。

  2. ProxyPass http://localhost:11342/ 及其下面一行最後的「/」都是須要的。

本文地址:http://www.tfan.org/nodejs-running-on-port-80-with-apache

參考資料:

相關文章
相關標籤/搜索