为什么我不能在apache中阻止单个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>

我有一个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>

命令允许,拒绝
全盘否定
命令允许,拒绝
全盘否定
命令允许,拒绝
全盘否定
命令允许,拒绝
全盘否定
这一切都没有成功。我看过其他的帖子,看起来我和其他人做了同样的事情。知道我为什么会失败吗


另外,我不能阻止整个目录,因为还有很多其他文件不应该被阻止。

这听起来有点像你试图用错误的方法来做。当然可以使用文件、目录或位置指令来阻止文件,但是将文件完全移出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;
            }
       }
  • js提供了一个服务器和客户端。因此,您需要创建服务器来运行node.js
  • 我使用express在node.js中使用端口创建服务器。如果您计划使用express,请不要忘记添加
    app.enable('trust proxy')在app.js中
  • 创建服务器后,它需要以node.js.Ex:-
    node-server.js
    node-app.js
  • 您可以使用
    http://localhost:{port}/

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

  • 您可以在任何路径(包括www)部署应用程序。如果您将应用程序放在www目录之外

  • 确保node.js应用程序目录必须具有apache或ngnix的适当所有权和权限。在授予所有权之前,请检查名称或apache或ngnix用户

  • 对于用户所有权,例如:
    chown-R www:data www:data{/path\u to\u node\u application}

  • 用于写入permission Ex:
    chmod-R 775{/path\u to\u node\u applicationin}

  • 启动服务器后,您需要在apache&nginx服务器中使用代理来全局访问您的站点

  • 如果您计划使用node.js使用websocket,则需要使用http版本1.1.Ex:proxy_http_版本1.1
  • 配置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;
                }
           }
    

  • 注意:确保您在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文件夹之外