如何配置nginx,在同一台机器上运行apache和node js?

时间:2014-02-17 17:58:24

标签: wordpress node.js apache nginx

我想知道如何设置nginx以在同一台服务器上运行apache(lamp)和node.js。

我不是服务器的精明人,但过去两周我学到了很多东西。

我看到我可以使用以下HAProxy <{1}}进行内容切换:wordpress and node.js

但是因为我已经在使用nginx,所以我认为最好使用它。

任何教程?或提示?

2 个答案:

答案 0 :(得分:1)

nginx,apache和node.js都是他们自己独立的服务器。它们是完全相互独立的原子实体。

有(非常常见的)apache或nginx作为代理服务器位于node.js服务器前面的情况。因此,您将在同一台计算机上同时运行两台服务器。重要的是要注意它们将在不同的端口上运行。

nginx,apache和node.js很可能在同一台机器上同时运行,但它们必须在不同的端口上运行。

但你的问题“如何设置nginx以在同一服务器上同时运行apache(lamp)和node.js”并不真正有意义,因为nginx没有“运行”apache或node.js. / p>

答案 1 :(得分:1)

如果您在PHP上编写了单个站点,并且想要启用socket.io,则可以在80端口(默认HTTP端口)上绑定nginx,在8080上绑定Apache,在3000上绑定Node.js服务器(Apache和节点可能具有其他)。

这是nginx配置:

http {
    #... some directives ...

    map $http_upgrade $connection_upgrade {  #required for websockets
        default upgrade;
        ''      close;
    }

    #... some more directives ...
}
server {
    listen          80;
    server_name     your-wordpress-site.com;

    root    /path/to/site/root;
    index   index.php   index.html  index.htm;


    location / {
        try_files   $uri   $uri/  /index.php;
    }

    location /socket.io {
        proxy_pass          http://127.0.0.1:3000;
        proxy_http_version  1.1;
        proxy_set_header    Upgrade $http_upgrade;           #these two headers are ...
        proxy_set_header    Connection $connection_upgrade;  #...required for websockets
    }

    location ~ \.php$ {
        proxy_set_header    X-Real-IP       $remote_addr;
        proxy_set_header    X-Forwarded-For $remote_addr;
        proxy_set_header    Host            $host;
        proxy_pass          http://127.0.0.1:8080;
    }

    location ~ /\.ht {
        deny all;
    }
}

因此,当请求URI以/socket.io开头时,您只需要代理到节点。

我从未使用过WordPress,因此我可以100%确定它在PHP方面没有任何问题。但是我用socket.io配置了nginx 100K次,它总能完美运行。

修改

如果此配置不起作用,您可以尝试以这种方式更改:

location / {
        proxy_set_header    X-Real-IP       $remote_addr;
        proxy_set_header    X-Forwarded-For $remote_addr;
        proxy_set_header    Host            $host;
        proxy_pass          http://127.0.0.1:8080;
}

location /socket.io {
        #paste here socket.io section from first example
}

location ~ \.(js|css|png|jpe?g|gif)$ {
        root /path/to/site/root;
}

在上一个location的RegExp中,您应列出您希望由nginx提供的所有静态文件扩展名。