2014-09-07 9 views
6

Ho un server Apache, in cui oltre alla mia app ho un'applicazione di websocket node.js. Il problema è che chiunque può leggere il contenuto del file semplicemente navigando ad esso nell'URL. Sto cercando di bloccare un accesso diretto a uno dei file (sono già riuscito a bloccare le cartelle node.js).Perché non riesco a bloccare un singolo file node.js in apache?

Sto modificando il file di configurazione: apache2/apache2.conf. Supponendo che il mio file è in /var/www/server/node_start.js ho cercato di seguito:

<Files /var/www/server/node_start.js> 
     Order allow,deny 
     Deny from all 
</Files> 

<FilesMatch /var/www/server/node_start.js> 
     Order allow,deny 
     Deny from all 
</FilesMatch> 

<Files /server/node_start.js> 
     Order allow,deny 
     Deny from all 
</Files> 

<FilesMatch /server/node_start.js> 
     Order allow,deny 
     Deny from all 
</FilesMatch> 

Niente di tutto questo ha funzionato. Ho guardato altri post e sembra che io stia facendo la stessa cosa degli altri. Qualche idea sul perché sto fallendo?

P.S. Non riesco a bloccare l'intera directory, perché ci sono molti altri file che non dovrebbero essere bloccati.

+0

Hm, buona domanda. Per me, la prima partita '' sembra completamente okay. Hai provato a usare 'htaccess' dalle cartelle locali? Forse il percorso è il problema lì dentro. Qual è stata la direttiva di lavoro per bloccare l'intera directory? '/ var/www/server' o'/server'? – ConcurrentHashMap

+0

@ConcurrentHashMap Non ho provato .htaccess perché sto provando a farlo senza di esso. Per bloccare l'intera directory (che ho fatto con successo) usavo: ' Ordine negare, permettono negano da tutto ' –

+0

IMHO vorrei solo mettere quel file 'node_start.js' fuori della cartella DocumentRoot di apache – pomeh

risposta

4

Si sta utilizzando un approccio errato per lavorare con node.js & server Apache. Approccio di lavorare con node.js è come qui sotto:

  1. Node.js dà un & client server. Quindi è necessario creare il server per eseguire con node.js
  2. Ho usato express per creare server in node.js con porta. Se avete intenzione di utilizzare esprimere poi non dimenticare di aggiungere app.enable('trust proxy'); in app.js
  3. Una volta creato il server ha bisogno di iniziare con node.js.Ex: - node sever.js o node app.js
  4. È possibile accedere al server di nodi utilizzando http://localhost:{port}/

  5. È possibile utilizzare forever o nodemon per eseguire il server di nodi. Per ulteriori informazioni, controllare i collegamenti Nodemon e Forever

  6. È possibile distribuire l'applicazione in qualsiasi percorso compreso www. Se metti la tua applicazione in outsite nella directory www.

  7. Verificare che la directory dell'app node.js sia titolare dell'autorizzazione & appropriata per apache o ngnix. Prima di dare la proprietà, controlla il nome o l'utente apache o ngnix.

  8. la proprietà utente Es: chown -R www:data www:data {/path_to_node_applicatoin}

  9. Per la scrittura PERMSSION Es: chmod -R 775 {/path_to_node_applicatoin}

  10. Dopo aver avviato il server è necessario utilizzare proxy Apache & del server nginx per accedere al sito a livello globale.

  11. Se si intende utilizzare websocket utilizzando node.js, è necessario http versione 1.1 .Ex: proxy_http_version 1.1 ;;
  12. Configurazione del server Apache per supportare server di node.js è come qui sotto:

    <VirtualHost *:80> 
         ServerAdmin [email protected] 
         ServerName example.com 
         ServerAlias www.example.com 
    
         ProxyRequests off 
    
         <Proxy *> 
          Order deny,allow 
          Allow from all 
         </Proxy> 
    
         <Location /> 
          ProxyPass http://127.0.0.1:3000/ #use the port which you specified for node application. 
          ProxyPassReverse http://127.0.0.1:3000/ 
         </Location> 
        </VirtualHost> 
    
  13. Configura ngnix per sostenere node.js è come qui sotto:

     server { 
          listen 80; 
          server_name example.com; 
          root /var/www/stack/nodejsapp; 
          index index.html index.htm; 
          location/{ 
            rewrite ^/socket/(.*) /$1 break; 
            proxy_pass http://127.0.0.1:3000; #use the port which you specified for node application. 
            proxy_redirect off; 
            proxy_set_header X-Real-IP $remote_addr; 
            proxy_set_header Host $http_host; 
            proxy_set_header X-NginX-Proxy true; 
            proxy_set_header X-Forwarded-Host $host; 
            proxy_set_header X-Forwarded-Server $host; 
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
            proxy_http_version 1.1; 
            proxy_set_header Upgrade $http_upgrade; 
            proxy_set_header Connection "upgrade"; 
            proxy_set_header Host $host; 
          } 
         } 
    

Nota: Assicurati di avere abilitato il supporto proxy in apache & ngnix.

3

Sembra un po 'come se steste cercando di farlo nel modo sbagliato. Dovrebbe essere sicuramente possibile bloccare i file usando le direttive Files, Directory o Location, ma non sarebbe meglio spostare completamente i file dalla directory accessibile dal web?

Ad esempio, è necessario distribuire l'applicazione di nodo in un percorso diverso (/ var/deployment/node_app) e avviarlo su una porta (come 8080). Poi, nella vostra configurazione di Apache, aggiungere una riga ProxyPass inoltrare eventuali richieste di applicazione nel tuo nodo utilizzando

http://localhost:8080 

In questo modo, è possibile delega le richieste attraverso alla vostra applicazione nodo, ei file che si sta cercando di proteggere aren accessibile tramite apache.

+0

Grazie per avermi detto che sto sbagliando. –

Problemi correlati