【问题标题】:How can i configure nginx, to run apache and node js on same machine? [closed]如何配置 nginx,在同一台机器上运行 apache 和 node js? [关闭]
【发布时间】:2014-03-17 03:56:34
【问题描述】:

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

我不是服务器专家,但过去两周我学到了很多东西。

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

但是,由于我已经在使用nginx,我认为使用它会更好。

有教程吗?或提示?

【问题讨论】:

标签: wordpress node.js apache nginx


【解决方案1】:

如果你有一个用 PHP 编写的单一站点,并且你想启用 socket.io,你可以将 nginx 绑定到 80 端口(默认 HTTP 端口),Apache 绑定 8080,Node.js 服务器绑定 3000(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 的正则表达式中,您应该列出您希望由 nginx 提供的所有静态文件的扩展名。

【讨论】:

  • 这很有帮助。我的意图是拥有一个 wordpress 网站并拥有一个 node.js/socket.io 聊天插件。但是,这个亚马逊服务器上不存在文件夹 var/www。你描述的案例是2个不同的站点。
  • @NetaMeta 编辑了我的帖子。请查看更改
  • @NetaMeta 再编辑一次。删除了所有多余的文字
  • 非常感谢,我同时也在尝试。
  • 不,不走运,我认为我的问题比那更基本
【解决方案2】:

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

在某些(非常常见的)情况下,apache 或 nginx 作为代理服务器位于 node.js 服务器之前。因此,您将同时在同一台机器上运行两台服务器。请务必注意,它们将在不同的端口上运行。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-04
    • 2017-04-23
    • 2015-08-25
    • 2016-01-16
    • 2011-12-05
    • 1970-01-01
    • 2012-05-09
    • 1970-01-01
    相关资源
    最近更新 更多