2016-04-30 14 views
6

Prefazione: ho provato ad installare l'estensione del nodo di JXCore per Plesk e non riesco a farlo funzionare. mi dà qualche errore e il loro supporto non risponde email ......Plesk 12.5 Passaggio proxy Nginx SSL all'app Node su porta diversa

[INDIRIZZO IP] = IP reale, example.com = dominio reale

Comunque, ho i miei nodejs app installato e funzionante con un certificato SSL. Funziona bene se vado a https://example.com:3000, che è la porta che sto usando per il nodo. Il certificato SSL carica tutto in verde e tutto funziona alla grande.

Sto usando Plesk 12.5 e Nginx viene già installato. Il file .conf si trova in /var/www/vhosts/[domain]/conf/nginx.conf.

In alto si legge:

#DO NOT MODIFY THIS FILE BECAUSE IT WAS GENERATED AUTOMATICALLY, 
#SO ALL YOUR CHANGES WILL BE LOST THE NEXT TIME THE FILE IS GENERATED. 

E non sono scherzando. Eventuali modifiche a questo file vengono sovrascritte quasi immediatamente.

Ecco l'intero contenuto del file:

server { 
     listen [IP ADDRESS]:443 ssl; 

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

    ssl_certificate    /usr/local/psa/var/certificates/cert-HREdQ9; 
    ssl_certificate_key   /usr/local/psa/var/certificates/cert-HREdQ9; 
    ssl_client_certificate  /usr/local/psa/var/certificates/cert-wpX6q1; 

    client_max_body_size 128m; 

    root "/var/www/vhosts/msgable.com/httpdocs"; 
    access_log "/var/www/vhosts/system/example.com/logs/proxy_access_ssl_log"; 
    error_log "/var/www/vhosts/system/example.com/logs/proxy_error_log"; 

    location/{ 
      proxy_pass https://[IP ADDRESS]: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 off; 
    } 

    location @fallback { 
      proxy_pass https://[IP ADDRESS]: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 off; 
    } 

    location ~ ^/plesk-stat/ { 
      proxy_pass https://[IP ADDRESS]: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 off; 
    } 
    location ~ ^/(.*\.(ac3|avi|bmp|bz2|css|cue|dat|doc|docx|dts|eot|exe|flv|gif|gz|htm|html|ico|img|iso|jpeg|jpg|js|mkv|mp3|mp4|mpeg|mpg|ogg|pdf|png|ppt|pptx|qt|rar|rm|svg|swf|tar|tgz|ttf|txt|wav|woff|woff2|xls|xlsx|zip))$ { 
      try_files $uri @fallback; 
    } 

    location ~ ^/(plesk-stat|webstat|webstat-ssl|ftpstat|anon_ftpstat|awstats-icon) { 
      proxy_pass https://74.208.65.63: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 off; 
    } 

    location ~ ^/~(.+?)(/.*?\.php)(/.*)?$ { 
      alias /var/www/vhosts/example.com/web_users/$1/$2; 
      fastcgi_split_path_info ^((?U).+\.php)(/?.+)$; 
      fastcgi_param PATH_INFO $fastcgi_path_info; 
      fastcgi_pass "unix:///var/www/vhosts/system/example.com/php-fpm.sock"; 
      include /etc/nginx/fastcgi.conf; 
    } 

    location ~ ^/~(.+?)(/.*)?$ { 
      proxy_pass https://[IP ADDRESS]: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 off; 
    } 

    location ~ \.php(/.*)?$ { 
      fastcgi_split_path_info ^((?U).+\.php)(/?.+)$; 
      fastcgi_param PATH_INFO $fastcgi_path_info; 
      fastcgi_pass "unix:///var/www/vhosts/system/example.com/php-fpm.sock"; 
      include /etc/nginx/fastcgi.conf; 
    } 

    location ~ /$ { 
      index index.html index.cgi index.pl index.php index.xhtml index.htm index.shtml; 
    } 

    include "/var/www/vhosts/system/example.com/conf/vhost_nginx.conf"; 
} 

non voglio includere il HTTP (non-SSL) roba, perché è lo stesso informazioni. L'unica differenza è che il porto è di 80, e il proxy_pass è impostato su 7080.

Noterete in basso, che ha:

include "/var/www/vhosts/system/example.com/conf/vhost_nginx.conf"; 

Questo è quello che ho messo in quel file:

location/{ 
    proxy_pass https://[IP ADDRESS]:3000; 
    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 off; 

}

Mettere che lì mi dà un:

nginx: [emerg] duplicate location "/" 

Ho anche provato ad utilizzare "direttive nginx aggiuntive" di Plesk nelle impostazioni, ma ottengo lo stesso errore:

nginx: [emerg] duplicato posizione "/" Tutte le idee? Sto per scaricare Plesk e cercare AWS o qualcosa del genere ... Sono giunto alla conclusione che, a) NON puoi sovrascrivere i conf Nginx creati da Plesk, b) NON puoi cambiare direttamente il file conf.

Quindi praticamente proxy_pass con Plesk è impossibile.

Edit:

provato anche farlo la strada a monte, ma l'aggiunta di direttive a monte per l'interfaccia di amministrazione tramite Plesk, o tramite vhost_nginx.conf mi dà un errore che dice "nginx: [emerg] direttiva a monte non è consentito Qui".

Modifica # 2: Leggi questo post Nginx to address Nodejs app, aggiungendo ciò che è stato spiegato qui non fa nulla. Iniziare a pensare che ciò non sia possibile usando Plesk.

ARG! Un compito così semplice su un server senza Plesk!

risposta

13

Dopo due giorni passati a chiacchierare, questo è ciò che ha risolto per me. In Plesk, si passa alle "Ulteriori direttive nginx" all'interno della pagina "Opzioni di hosting".

Questo è ciò che ho aggiunto per rendere proxy_pass Nginx all'app del mio nodo. Non è stato necessario modificare o modificare alcun file .conf.

## Set the location routing. 
location ~/{ 

    proxy_set_header Host $host; 
    proxy_set_header X-Real-IP $remote_addr; 

    ##Use the domain.tld here. 
    proxy_pass https://example.com:3000; 
} 
+1

Penso che la parte essenziale di questa risposta (per lo stesso problema che ho) sta usando "posizione ~ /" invece di "posizione /" per evitare l'avvertimento duplicato. – mniess

+0

Hai ragione, rimuoverò tutte le altre cose che non sono necessarie. – David

+0

Grazie mille! Il wrapping proxy_pass con 'location ~/{}' ha risolto il problema! – Kovah