为什么我不能在apache中阻止单个node.js文件?
我有一个apache服务器,除了我的应用程序之外,我还有一个node.js websocket应用程序。问题是,任何人只要在URL中导航到文件内容,就可以读取文件内容。我正在尝试阻止对其中一个文件的直接访问(我已经成功阻止了node.js文件夹) 我正在修改配置文件:为什么我不能在apache中阻止单个node.js文件?,node.js,apache,Node.js,Apache,我有一个apache服务器,除了我的应用程序之外,我还有一个node.js websocket应用程序。问题是,任何人只要在URL中导航到文件内容,就可以读取文件内容。我正在尝试阻止对其中一个文件的直接访问(我已经成功阻止了node.js文件夹) 我正在修改配置文件:apache2/apache2.conf。假设我的文件位于/var/www/server/node_start.js中,我已尝试执行以下操作: <Files /var/www/server/node_start.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>
命令允许,拒绝
全盘否定
命令允许,拒绝
全盘否定
命令允许,拒绝
全盘否定
命令允许,拒绝
全盘否定
这一切都没有成功。我看过其他的帖子,看起来我和其他人做了同样的事情。知道我为什么会失败吗
另外,我不能阻止整个目录,因为还有很多其他文件不应该被阻止。这听起来有点像你试图用错误的方法来做。当然可以使用文件、目录或位置指令来阻止文件,但是将文件完全移出web可访问的目录不是更好吗 i、 e.您应该将节点应用程序部署到不同的位置(/var/deployment/node_app),并在端口(例如8080)上启动它。然后,在apache配置中,添加ProxyPass行,使用
http://localhost:8080
通过这种方式,您可以将请求代理到您的节点应用程序,并且您试图保护的文件无法通过apache访问。您使用错误的方法来处理node.js和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>
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;
}
}
app.enable('trust proxy')代码>在app.js中
node-server.js
或node-app.js
http://localhost:{port}/
chown-R www:data www:data{/path\u to\u node\u application}
chmod-R 775{/path\u to\u node\u applicationin}
<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>
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中启用了代理支持。您是否在没有完整路径和顺序指令的情况下尝试过它
<Files node_start.js >
Deny from all
</Files>
全盘否定
由Hm提供,问得好。对我来说,第一个
匹配似乎完全没问题。您是否尝试过从本地文件夹使用htaccess
?也许路径就是里面的问题。阻止整个目录的工作指令是什么/var/www/server
或/server
?@ConcurrentHashMap我没有尝试.htaccess,因为我尝试在没有它的情况下执行此操作。为了阻止整个目录(我已经成功地做到了),我使用了:orderdeny,allowdeny from all
IMHO,我只需将node\u start.js
文件放在apache DocumentRoot文件夹之外