[英]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的方法如下:
app.enable('trust proxy');
在app.js node sever.js
开始: - node sever.js
或node app.js
您可以使用http://localhost:{port}/
访问节点服务器
您可以在任何路径部署您的应用程序,包括www。 如果您将应用程序放在www目录之外。
确保node.js app目录必须具有apache或ngnix的正确所有权和权限。 在给予所有权之前,请检查名称或apache或ngnix用户。
对于用户所有权Ex: chown -R www:data www:data {/path_to_node_applicatoin}
写作permssion Ex: chmod -R 775 {/path_to_node_applicatoin}
启动服务器后,您需要在apache和nginx服务器中使用代理来全局访问您的站点。
配置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>
配置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.