簡體   English   中英

在運行Nginx的反向代理的apache上運行的服務器上安裝Nodejs應用

[英]Install Nodejs app on server running on apache which uses reverse proxy with nginx

我知道在堆棧交換中有很多這樣的問題。 但是沒有任何辦法可以幫助我解決這種情況。

這是我的情況。

我有一個在apache2運行的Web服務器,偵聽端口號70807081 我在服務器上使用了反向代理方法,並安裝了正在監聽端口80 nginx 所以現在nginx是前端。 我的wordpress網站運行在http://www.example.com上

現在,我嘗試在服務器上無法安裝node.js應用程序。 這是有道理的,因為nginx正在使用端口80。

我提到了以下關於SO的帖子

Node.js + Nginx-現在怎么辦?

同一服務器上的Apache和Node.js

我嘗試了以下

    upstream example.com/my-app {
    server 1**.*.**.**:3010;
}

# the nginx server instance
server {
    listen 1**.*.**.**:80;
        server_name example.com/my-app;
    server_name www.example.com/my-app;
    server_name ipv4.example.com/my-app;


    access_log off;

    # pass the request to the node.js server with the correct headers and much more can be added, see nginx config options
    location / {
      proxy_set_header Host             $host;
      proxy_set_header X-Real-IP        $remote_addr;
      proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;
      proxy_set_header X-Accel-Internal /internal-nginx-static-location;



      proxy_pass http://example.com/my-app;
      proxy_redirect off;
    }
location /internal-nginx-static-location/ {
        alias      /var/www/vhosts/example.com/httpdocs/node;
        access_log /var/www/vhosts/example.com/httpdocs/node/statistics/logs/proxy_access_ssl_log;
        add_header X-Powered-By PleskLin;
        internal;
    }
 }

我將上述conf寫入文件中,並將其包含在/etc/nginx/conf.d/xzzeaweae_nginx.conf中。

它不起作用。 但是該應用可以在1 ++。+。++。++:3010上正常運行。

我的目錄結構。

/var/www/vhosts/example.com/httpdocs/

我的wordpress網站根目錄:/var/www/vhosts/example.com/httpdocs/

我的nodejs應用程序目錄:/var/www/vhosts/example.com/httpdocs/my-nodejsapp-folder/

更新

這是我的Apache應用程序的反向代理配置

server {
    listen +++.+.++.++:80 ;
    listen ++.+.+++.++:80 ;

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

由於我的服務器上運行着多個網站,

我對每個網站都有反向代理配置。

這是我的網站之一

server {
    listen +++.+.++.++:443 ssl;

    server_name example.com;
    server_name www.example.com;
    server_name ipv4.example.com;

    ssl_certificate             /opt/psa/var/certificates/certaqnxHd2;
    ssl_certificate_key         /opt/psa/var/certificates/certaqnxHd2;
    ssl_session_timeout         5m;

    ssl_protocols               SSLv2 SSLv3 TLSv1;
    ssl_ciphers                 HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers   on;

    client_max_body_size 128m;

    location / { # IPv6 isn't supported in proxy_pass yet.
        proxy_pass https://+++.+.++.++:7081;

        proxy_set_header Host             $host;
        proxy_set_header X-Real-IP        $remote_addr;
        proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;
        proxy_set_header X-Accel-Internal /internal-nginx-static-location;
        access_log off;
    }

    location /internal-nginx-static-location/ {
        alias      /var/www/vhosts/example.com/httpdocs/;
        access_log /var/www/vhosts/example.com/statistics/logs/proxy_access_ssl_log;
        add_header X-Powered-By PleskLin;
        internal;
    }
}

server {
    listen +++.+.++.++:443 ssl;
    server_name webmail.example.com;

    ssl_certificate             /opt/psa/var/certificates/certaqnxHd2;
    ssl_certificate_key         /opt/psa/var/certificates/certaqnxHd2;
    ssl_session_timeout         5m;

    ssl_protocols               SSLv2 SSLv3 TLSv1;
    ssl_ciphers                 HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers   on;
    client_max_body_size 128m;

    location / { # IPv6 isn't supported in proxy_pass yet.
        proxy_pass https://+++.+.++.++:7081;

        proxy_set_header Host             $host;
        proxy_set_header X-Real-IP        $remote_addr;
        proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;
        access_log /var/www/vhosts/example.com/statistics/logs/webmail_access_ssl_log;
    }
}



server {
    listen +++.+.++.++:80;

    server_name example.com;
    server_name www.example.com;
    server_name ipv4.example.com;


    client_max_body_size 128m;

    location / { # IPv6 isn't supported in proxy_pass yet.
        proxy_pass http://+++.+.++.++:7080;

        proxy_set_header Host             $host;
        proxy_set_header X-Real-IP        $remote_addr;
        proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;
        proxy_set_header X-Accel-Internal /internal-nginx-static-location;
        access_log off;
    }

    location /internal-nginx-static-location/ {
        alias      /var/www/vhosts/example.com/httpdocs/;
        access_log /var/www/vhosts/example.com/statistics/logs/proxy_access_log;
        add_header X-Powered-By PleskLin;
        internal;
    }
}

server {
    listen +++.+.++.++:80;
    server_name webmail.example.com;

    client_max_body_size 128m;

    location / { # IPv6 isn't supported in proxy_pass yet.
        proxy_pass http://+++.+.++.++:7080;

        proxy_set_header Host             $host;
        proxy_set_header X-Real-IP        $remote_addr;
        proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;
        access_log /var/www/vhosts/example.com/statistics/logs/webmail_access_log;
    }
}

注意apache2中存在sites-available sites-enabled文件。 不在nginx

我希望我的nodejs應用程序可以在example.com/my-nodejsapp-folder/上運行而沒有任何端口號。

任何幫助將不勝感激。

http://nginx.org/en/docs/http/ngx_http_upstream_module.html#upstream

我還沒有看到上面說可以在上游名稱中使用點和斜杠的地方

upstream mynodeapp {
    server 1**.*.**.**:3010;
}

然后

server {
    listen 1**.*.**.**:80;
    server_name example.com/my-app;

    #...etc.

    location / {
      proxy_set_header Host             $host;
      proxy_set_header X-Real-IP        $remote_addr;
      proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;

      # not this.
      # proxy_set_header X-Accel-Internal /internal-nginx-static-location;

      proxy_pass http://mynodeapp/my-app;
      proxy_redirect off;
    }
 }

然后,您的節點應用程序需要編寫一個包含以下內容的標頭:

X-Accel-Redirect: /internal-nginx-static-location/somefile

有一些限制,例如,如果您在返回所有標題之前開始返回內容(例如,打印語句),則可能無法正常工作。 僅使用有趣的標頭進行第一次測試比較容易。


例:

# /etc/nginx/conf.d/default.conf
upstream mynodeapp {
    server 127.0.0.1:8000;
}

server {
    listen 127.0.0.1:80;

    location /secret {
        alias /tmp/secret;
        internal;
    }

    location /my-app {
        proxy_pass http://mynodeapp/my-app;
    }
}

讓我們嘗試以下方法:

// /tmp/index.js
var http = require('http');
http.createServer(function (req, res) {
  res.writeHead(200, {'X-Accel-Redirect': '/secret/foo'});
  res.end('Hello World\n');
}).listen(8000, '127.0.0.1');

現在是命令行:

[root@localhost secret]# pwd
/tmp/secret
[root@localhost secret]# echo bar > foo 
[root@localhost secret]# curl http://127.0.0.1:80/my-app
bar
[root@localhost secret]# curl http://127.0.0.1:80/secret/foo
<html>
<head><title>404 Not Found</title></head>
<body bgcolor="white">
<center><h1>404 Not Found</h1></center>
<hr><center>nginx/1.0.15</center>
</body>
</html>
[root@localhost secret]# 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM