2010-06-08 150 views
45

既然我有nginx设置,我需要能够隐藏我的.git目录。我需要什么样的重写才能停止窥探?并且在server {}http {}区块中的哪个区域会去?如何隐藏.git项目目录?

回答

61
http { 
    server { 
    location ~ /\.git { 
     deny all; 
    } 
    } 
} 

location指令将拒绝访问任何.git目录中的任何子目录。

注意:此位置块必须位于主位置块之前,以便可以先评估它。

+0

如果'.git'文件夹位于像'/ folder/.git /'这样的子目录中,是否可以工作? – Xeoncross 2010-06-08 17:55:24

+2

是的,它的确如此。 “location〜”匹配*正则表达式*,不是子路径。 – rzab 2010-06-09 08:31:41

+0

记住这个位置块必须是**第一个**位置块。否则其他块可能在它之前。在大多数情况下只处理一个位置块。 – dreamlab 2015-07-24 22:44:24

1

这样可以防止有人碰到http://example.com/.git,但是如果您在像http://example.com/example/.git这样的子目录中工作,它将会失败。你真的需要:

location ~ .*/\.git { 
    deny all; 
} 
+2

我刚测试过这个和'location〜/ \。 {access_log off; log_not_found off;否认一切; }'会阻止对隐藏子目录的访问。所以我不认为额外的'。*'是必要的。 – chrishiestand 2015-04-09 23:04:07

43

隐藏的目录和文件不应该是Web访问。一般回答你的问题是:

location ~ /\. { return 403; } 

这种拒绝访问git的,使用svn,和的.htaccess文件类似的任何子目录。

+0

不完全是问什么问题 - 但他是正确的无论如何:) – 2013-11-03 18:05:23

+19

我会进一步说,没有人应该知道他们的存在,期限! (不仅仅是他们应该永远被拒绝访问他们)。因此,你的答案从'return 403;'变为'return 404;'......这样,试图访问它的个人将不知道它是否真的存在。 – Swivel 2014-03-11 04:45:09

+4

拒绝所有优先于返回403:https://github.com/h5bp/server-configs/issues/126 – flickerfly 2015-05-26 19:50:02