如何解决Nginx:认证后如何使用单个内部指令提供多个内容
我仅在通过后端身份验证后才显示我的文档(使用React构建的单页应用程序)。
我的配置:
- Nginx充当后端(Django)的反向代理,并提供诸如单页应用程序之类的静态文件。
- 后端Django,可以识别用户并使用X-Accel-Redirect向Nginx发出请求。
所以我按如下进行操作:
1)在Django上进行身份验证
views.py
def get_doc(request):
if request.method == 'POST':
form = PasswordForm(request.POST)
if form.is_valid():
if form.cleaned_data['password'] == 'foo':
response = HttpResponse()
response['Content-Type'] = ''
response['X-Accel-Redirect'] = '/docs-auth/'
return response
else:
return HttpResponse("Wrong password")
else:
form = PasswordForm()
return render(request,'docs/form.html',{'form': form})
urls.py
urlpatterns = [
path('docs/',views.get_doc,name='documentation'),]
2)Nginx提供单页应用程序
upstream backend {
server web:8000;
}
server {
location = /favicon.ico {access_log off;log_not_found off;}
...
location /docs {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_redirect off;
proxy_pass http://backend;
}
location /docs-auth/ {
internal;
alias /home/foo/docs/;
index index.html;
try_files $uri $uri/ /docs/index.html;
}
location / {
alias /home/foo/landing_page/;
error_page 404 /404.html;
index index.html;
try_files $uri $uri/ =404;
}
}
我的问题是将index.html文件提供给用户,但是由于浏览器无法访问内部URL,浏览器访问CSS和Javascript文件的请求被阻止了。
您有解决我问题的想法吗?
在后端身份验证之后,我还开放了另一种服务于单页应用程序的方法。
非常感谢。
解决方法
您想使用auth_request标记使您的生活更轻松。这是一个示例,您将需要对该配置进行改造。您只需将auth_request标记移到位置之外的顶层即可使整个服务器需要auth
server {
...
location /docs {
auth_request /docs-auth;
...// Add your file redering here
}
location = /docs-auth {
internal;
proxy_pass http://auth-server;
proxy_pass_request_body off;
proxy_set_header Content-Length "";
proxy_set_header X-Original-URI $request_uri;
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。