#django #angular #nginx #redirect
#django #angular #nginx #перенаправление
Вопрос:
У меня есть приложение с Angular во внешнем интерфейсе и Django во внутреннем интерфейсе на разных портах на одном хосте, и для аутентификации у меня есть этот фрагмент кода в моем userService.js:
authenticateUser: function() {
return $window.location.href = 'https://myhost:backend_port/oidc/auth/request/'
},
но когда я захожу в свое приложение, оно выдает мне «не удается ПОЛУЧИТЬ / oidc / auth / request /».
итак, я думаю, что интерфейс пытается справиться с этим, когда оно должно поступать на серверную часть.
Нужно ли мне добавлять ‘location’ в конфигурацию Nginx для серверной части? Вот моя текущая конфигурация:
server {
listen 9004;
ssl on;
ssl_certificate /etc/ssl/certs/chained.cer;
ssl_certificate_key /etc/ssl/certs/key.key;
error_page 497 https://$host:9004$request_uri;
server_name myhost;
error_log /var/log/nginx/error-9004.log error;
client_max_body_size 2G;
location / {
proxy_pass https://myhost:3004;
}
location /static/ {
root /path/to/backend/code;
}
location /media/ {
root /path/to/media;
}
location /api {
include uwsgi_params;
uwsgi_pass unix:/run/uwsgi/myapp.sock;
}
Обновить:
Я попытался добавить следующее в свою конфигурацию nginx:
location /oidc {
root /path/to/backend/code;
}
и теперь я получаю 404. Но это должно быть покрыто моим urls.py:
# openid requirement
url(r'^oidc/', include('oidc_rp.urls')),
вот oidc_rp.urls:
urlpatterns = [
url(r'^auth/request/$', views.OIDCAuthRequestView.as_view(), name='oidc_auth_request'),
url(r'^auth/cb/$', views.OIDCAuthCallbackView.as_view(), name='oidc_auth_callback'),
url(r'^end-session/$', views.OIDCEndSessionView.as_view(), name='oidc_end_session'),
]
ОБНОВЛЕНИЕ 2:
интерфейс angular работает на pm2
Комментарии:
1. Вам не следует добавлять блок location для / oidc, эта часть маршрутизации должна обрабатываться вашим приложением django. Можете ли вы опубликовать свой полный файл nginx conf? У вас разные серверные блоки для портов клиента и сервера? Кроме того, я бы посоветовал не публиковать вашу фактическую структуру fodler на общедоступных сайтах.
2. спасибо, что ознакомили меня со структурой папок 🙂 Интерфейс работает на pm2, поэтому его нет в моей nginx conf. Добавлена остальная часть conf
3. я думаю, что 9004 — это внешний порт здесь. Какой у вас серверный порт? Есть ли у вас другой nginx conf, который прослушивает backend_port, или серверный порт доступен общедоступно? Глядя только на предоставленную конфигурацию, вы должны иметь возможность получить доступ к api следующим образом: myhost: 9004/api/oidc/auth/ request ( myhost: 9004 / api передается в django)
4. 9004 — это серверный порт, 3004 — порт интерфейса. позвольте мне попробовать это