2014-09-07 3 views
6

Ich habe einen Apache-Server, wo ich zusätzlich zu meiner App eine node.js Websocket-Anwendung habe. Das Problem ist, dass jeder den Dateiinhalt lesen kann, indem er einfach in der URL zu ihm navigiert. Ich versuche einen direkten Zugriff auf eine der Dateien zu blockieren (ich habe es bereits geschafft, node.js Ordner zu blockieren).Warum kann ich eine einzelne node.js-Datei im Apache nicht blockieren?

Ich ändere meine Konfigurationsdatei: apache2/apache2.conf. Unter der Annahme, dass meine Datei in /var/www/server/node_start.js ist Ich habe versucht, folgende:

<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> 

Nichts davon ausgearbeitet. Ich habe mir andere Beiträge angeschaut und es sieht so aus, als ob ich dasselbe mache wie andere. Irgendeine Idee, warum ich versage?

P.S. Ich kann das ganze Verzeichnis nicht blockieren, da es viele andere Dateien gibt, die nicht blockiert werden sollten.

+0

Hm, gute Frage. Für mich scheint das erste '' Spiel völlig in Ordnung zu sein. Haben Sie versucht, 'htaccess' aus lokalen Ordnern zu verwenden? Vielleicht ist der Weg dahin das Problem. Was war die Arbeitsanweisung, um das gesamte Verzeichnis zu blockieren? '/ var/www/server' oder'/server'? – ConcurrentHashMap

+0

@ConcurrentHashMap Ich habe .htaccess nicht versucht, weil ich versuche, dies ohne es zu tun. Um das ganze Verzeichnis zu blockieren (was ich erfolgreich gemacht habe), benutzte ich: ' Order deny, allow deny von allen ' –

+0

IMHO würde ich einfach diese 'node_start.js' Datei nach draußen legen der Apache DocumentRoot Ordner – pomeh

Antwort

4

Sie verwenden einen falschen Ansatz, um mit dem Apache-Server node.js & zu arbeiten. Ansatz mit node.js zu arbeiten, ist wie folgt:

  1. Node.js gibt einen Server & Client. Daher müssen Sie einen Server erstellen, der mit node.js ausgeführt wird.
  2. Ich habe Express verwendet, um einen Server in node.js mit Port zu erstellen. Wenn Sie dann vergessen Sie nicht ausdrücken verwenden planen app.enable('trust proxy'); in app.js
  3. hinzufügen Nachdem Sie Ihren Server erstellen Sie es mit node.js.Ex beginnen muss: - node sever.js oder node app.js
  4. Sie können auf die Node-Server mit http://localhost:{port}/

  5. Sie können für den Node-Server für immer oder nodemon verwenden. Weitere Informationen finden Sie unter Nodemon und Forever

  6. Sie können Ihre Anwendung auf einem beliebigen Pfad einschließlich www bereitstellen. Wenn Sie Ihre Anwendung außerhalb des WWW-Verzeichnisses platzieren.

  7. Stellen Sie sicher, dass das App-Verzeichnis node.js über die entsprechenden Berechtigungen verfügt. & Erlaubnis für Apache oder Ngnix. Bevor Sie das Eigentumsrecht angeben, überprüfen Sie bitte den Namen oder Apache oder ngnix Benutzer.

  8. Für Benutzer des Besitzes Ex: chown -R www:data www:data {/path_to_node_applicatoin}

  9. Zum Schreiben permssion Ex: chmod -R 775 {/path_to_node_applicatoin}

  10. Nach dem Starten des Servers müssen Sie Proxy in Apache & nginx-Server verwenden, um Ihre Website weltweit zuzugreifen.

  11. Wenn Sie planen, Websocket mit node.js zu verwenden, müssen Sie http Version 1.1 .Ex: proxy_http_version 1.1 ;;
  12. konfigurieren Apache-Server node.js Server zu unterstützen, ist wie folgt:

    <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. konfigurieren ngnix node.js zu unterstützen, ist wie folgt:

     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; 
          } 
         } 
    

Hinweis: Stellen Sie sicher, dass Sie die Proxy-Unterstützung in Apache & ngnix aktiviert haben.

3

Das klingt ein bisschen so, als würden Sie es falsch machen. Es sollte definitiv möglich sein, Dateien mit den Direktiven Dateien, Verzeichnis oder Ort zu blockieren, aber wäre es nicht besser, die Dateien vollständig aus dem Verzeichnis zu entfernen, auf das man zugreifen kann?

d. H. Sie sollten Ihre Knotenanwendung an einem anderen Speicherort (/ var/deployment/node_app) bereitstellen und sie auf einem Port (z. B. 8080) starten. Dann in Ihrer Apache-Konfiguration, fügen Sie einen Proxypass Zeilenanforderungen in der Knoten-Anwendung weiterleiten

http://localhost:8080 

Auf diese Weise verwenden, können Sie Proxy die Anfragen bis hin zu Ihrem Knoten Anwendung und die Dateien Sie versuchen aren zu schützen Durch Apache nicht erreichbar.

+0

Danke, dass Sie mir sagen, dass ich es falsch mache. –

Verwandte Themen