2014-09-07 3 views
6

У меня есть сервер apache, где в дополнение к моему приложению у меня есть приложение node.js websocket. Проблема в том, что любой пользователь может прочитать содержимое файла, просто переместив его по URL-адресу. Я пытаюсь заблокировать прямой доступ к одному из файлов (мне уже удалось заблокировать папки node.js).Почему я не могу заблокировать один файл node.js в apache?

Я изменяю свой файл конфигурации: apache2/apache2.conf. Если предположить, что мой файл находится в /var/www/server/node_start.js я попытался следующее:

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

Ничего из этого не вышло. Я просмотрел другие сообщения, и похоже, что я делаю то же самое, что и другие. Любая идея, почему я терпеть неудачу?

P.S. Я не могу заблокировать весь каталог, потому что есть много других файлов, которые не следует блокировать.

+0

Hm, хороший вопрос. Для меня первый матч '' выглядит вполне нормально. Вы пытались использовать 'htaccess' из локальных папок? Может быть, путь в этом есть проблема. Какова была рабочая директива для блокировки всего каталога? '/ var/www/server' или'/server'? – ConcurrentHashMap

+0

@ConcurrentHashMap Я не пробовал .htaccess, потому что я пытаюсь сделать это без него. Чтобы заблокировать весь каталог (который я сделал успешно), я использовал: ' Отказаться от запрета, разрешить отклонить от всех ' –

+0

IMHO Я бы просто поместил этот файл 'node_start.js' за пределы папки apache DocumentRoot – pomeh

ответ

4

Вы используете неправильный подход для работы с node.js & apache server. подход к работе с Node.js, как показано ниже:

  1. Node.js дает & клиента сервера. Следовательно, вам нужно создать сервер для работы с node.js
  2. Я использовал выражение для создания сервера в node.js с портом. Если вы планируете использовать выражение, то не забудьте добавить app.enable('trust proxy'); в app.js
  3. После создания сервера он должен начать с node.js.Ex: - node sever.js или node app.js
  4. Вы можете получить доступ к сервер с использованием http://localhost:{port}/

  5. Вы можете использовать forever или nodemon для запуска сервера узлов. Для получения дополнительной информации проверьте ссылки Nodemon и Forever

  6. Вы можете разместить свое приложение на любом пути, включая www. Если вы разместите свое приложение на сайте www.

  7. Убедитесь, что каталог приложения node.js должен иметь правильное владение & разрешение для apache или ngnix. Прежде чем предоставить право собственности, проверьте имя пользователя или пользователя apache или ngnix.

  8. собственность пользователя Ex: chown -R www:data www:data {/path_to_node_applicatoin}

  9. Для написания permssion Ex: chmod -R 775 {/path_to_node_applicatoin}

  10. После запуска сервера вам нужно использовать прокси в Apache & сервер Nginx, чтобы получить доступ к сайту по всему миру.

  11. Если вы планируете использовать websocket с помощью node.js, вам нужно http-версию 1.1 .Ex: proxy_http_version 1.1 ;;
  12. сервер Apache Настройка для поддержки Node.js сервера, как показано ниже:

    <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. Настройка ngnix для поддержки Node.js, как показано ниже:

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

Примечание: Убедитесь, что вы включили поддержку прокси-сервера в apache & ngnix.

3

Это похоже на то, что вы пытаетесь сделать это неправильно. Должно быть, возможно, что можно заблокировать файлы с помощью директив «Файлы», «Каталог» или «Местоположение», но не было бы лучше полностью переместить файлы из веб-каталога?

i.e. Вы должны развернуть свое приложение-узел в другое место (/ var/deployment/node_app) и запустить его на порт (например, 8080). Затем, в вашем апаче конфигурации, добавьте PROXYPASS линию для пересылки запросов в ваше приложение с помощью узла

http://localhost:8080 

Таким образом, вы можете прокси-запросы через к приложению узла, а также файлы, которые вы пытаетесь защитить Арен доступный через apache.

+0

Спасибо, что сообщили мне, что я делаю это неправильно. –

Смежные вопросы