繁体   English   中英

为什么我不能在apache中阻止单个node.js文件?

[英]Why can not I block a single node.js file in apache?

我有一个apache服务器,除了我的应用程序,我有一个node.js websocket应用程序。 问题是任何人都可以通过在URL中导航到文件内容来阅读文件内容。 我试图阻止直接访问其中一个文件(我已经设法阻止node.js文件夹)。

我正在修改我的配置文件: 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>

这些都没有成功。 我看过其他帖子,看起来我和其他人一样。 知道我失败的原因吗?

PS我无法阻止整个目录,因为还有很多其他文件不应该被阻止。

您正在使用错误的方法来处理node.js和apache服务器。 使用node.js的方法如下:

  1. Node.js提供服务器和客户端。 因此,您需要创建与node.js一起运行的服务器
  2. 我使用express在node.js中创建带端口的服务器。 如果您打算使用快递,请不要忘记添加app.enable('trust proxy'); 在app.js
  3. 创建服务器之后,需要从node sever.js开始: - node sever.jsnode app.js
  4. 您可以使用http://localhost:{port}/访问节点服务器

  5. 您可以使用forever或nodemon来运行节点服务器。 有关更多信息,请查看NodemonForever的链接

  6. 您可以在任何路径部署您的应用程序,包括www。 如果您将应用程序放在www目录之外。

  7. 确保node.js app目录必须具有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. 如果您计划使用node.js使用websocket,则需要http版本1.1 .Ex:proxy_http_version 1.1 ;;
  12. 配置apache服务器以支持node.js服务器如下:

     <VirtualHost *:80> ServerAdmin nodeadmin@example.com 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中启用了代理支持。

这听起来有点像你试图以错误的方式做到这一点。 绝对可以使用“文件”,“目录”或“位置”指令来阻止文件,但是将文件完全移出Web可访问目录不是更好吗?

即,您应该将节点应用程序部署到其他位置(/ var / deployment / node_app)并在端口(例如8080)上启动它。 然后,在您的apache配置中,添加ProxyPass行以使用将请求转发到您的节点应用程序

http://localhost:8080

这样,您可以将请求代理到您的节点应用程序,并且您尝试保护的文件无法通过apache访问。

你有没有完整的路径和订单指令尝试过吗?

<Files node_start.js >
  Deny from all
</Files>

http://www.askapache.com/htaccess/using-filesmatch-and-files-in-htaccess.html提供

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM