Web2py & nginx - 我必须设置静态文件夹吗
Web2py & nginx - do I have to set up static folder
我是 运行 nginx/uWSGI 并尝试使用 'auth.requires_login()' (https://groups.google.com/forum/#!topic/web2py/0j92-sPp4bc) 锁定一个 web2py 网站,这样只有登录的用户才能访问它,甚至 /static/ 下的内容。如果我用
设置 nginx 配置文件
location ~* /(\w+)/static/ {
root /home/www-data/web2py/applications/;
}
按照文档中的建议,这不会绕过访问控制,让任何人都可以看到静态内容吗?如果我将此行从配置文件中删除,web2py 是否仍会向登录用户共享静态内容(尽管可能会慢一点)?
是的,使用那个 nginx 规则将绕过 web2py。删除它并让 web2py 处理 /static/ 也不会改变太多,因为这直接来自 web2py 手册:
http://127.0.0.1:8000/a/static/filename
There is no controller called "static". web2py interprets this as a request for the file called "filename" in the subfolder "static" of the application "a".
When static files are downloaded, web2py does not create a session, nor does it issue a cookie or execute the models.
所以因为没有controller,静态内容不能直接使用auth.requires_login()。这是因为 /static/ 中的文件通常不打算进行访问控制,否则浏览器将无法获得甚至呈现欢迎或登录页面所需的 css、js 等。
但是,如果您仍然希望对静态文件(即私人 pdf 文件)进行站点范围的访问控制,您可以这样做:
- 在您的应用程序目录中,创建一个名为 private_static
的文件夹
然后在您的控制器中添加以下内容:
#default.py
import os
auth.requires_login()
def private_static():
filename = os.path.join(*request.args)
allowed = ['private1.pdf', 'private2.pdf'] # have some kind of validation for security!
if not filename in allowed:
raise HTTP(404)
return response.stream(open(os.path.join(request.folder, 'private_static', filename)))
在您看来类似以下内容:
<a href="{{=URL('private_static', args=['private1.pdf'])}}">Private Document</a>
现在访问 http://.../private_static/private1.pdf 将强制用户在获取静态文件之前登录。
我是 运行 nginx/uWSGI 并尝试使用 'auth.requires_login()' (https://groups.google.com/forum/#!topic/web2py/0j92-sPp4bc) 锁定一个 web2py 网站,这样只有登录的用户才能访问它,甚至 /static/ 下的内容。如果我用
设置 nginx 配置文件location ~* /(\w+)/static/ {
root /home/www-data/web2py/applications/;
}
按照文档中的建议,这不会绕过访问控制,让任何人都可以看到静态内容吗?如果我将此行从配置文件中删除,web2py 是否仍会向登录用户共享静态内容(尽管可能会慢一点)?
是的,使用那个 nginx 规则将绕过 web2py。删除它并让 web2py 处理 /static/ 也不会改变太多,因为这直接来自 web2py 手册:
http://127.0.0.1:8000/a/static/filename There is no controller called "static". web2py interprets this as a request for the file called "filename" in the subfolder "static" of the application "a". When static files are downloaded, web2py does not create a session, nor does it issue a cookie or execute the models.
所以因为没有controller,静态内容不能直接使用auth.requires_login()。这是因为 /static/ 中的文件通常不打算进行访问控制,否则浏览器将无法获得甚至呈现欢迎或登录页面所需的 css、js 等。
但是,如果您仍然希望对静态文件(即私人 pdf 文件)进行站点范围的访问控制,您可以这样做:
- 在您的应用程序目录中,创建一个名为 private_static 的文件夹
然后在您的控制器中添加以下内容:
#default.py
import os
auth.requires_login()
def private_static():
filename = os.path.join(*request.args)
allowed = ['private1.pdf', 'private2.pdf'] # have some kind of validation for security!
if not filename in allowed:
raise HTTP(404)
return response.stream(open(os.path.join(request.folder, 'private_static', filename)))
在您看来类似以下内容:
<a href="{{=URL('private_static', args=['private1.pdf'])}}">Private Document</a>
现在访问 http://.../private_static/private1.pdf 将强制用户在获取静态文件之前登录。