nginx предоставляет веб-приложению часть URL-адреса
Я использую nginx 0.8.44, и у меня есть два экземпляра uwsgi (0.9.5.4). Один для моего сайта Django, другой работает под управлением Trac.
У меня есть настройки Django как location / { ... }
и трак location /trac { ... }
Но когда я иду в http://mysite/trac
, это дает Trac часть /trac URL. Таким образом, я в основном получаю 404, потому что Trac ищет URL под своим корнем, который является /trac. Страница, на которой идет
Error: Not Found
No handler matched request to /trac
И таблицы стилей CSS не работают на этой странице. Но типичные части Trac там как ссылки "Просмотр билетов" и "Вики".
Но если я изменю местоположение Trac на /, это будет работать отлично. Есть ли какой-либо способ в nginx или uwsgi, чтобы не отправлять часть "location" url приложению? Это также происходит с Django, если его местоположение не /.
Ранее я использовал Apache с mod_wsgi, и он мог делать это без суеты.
2 ответа
Я закончил настройку поддоменов.
Так что для trac я использую trac.mydomain.com.
Я не нашел способ сделать это без поддоменов, но это может быть возможно. Это просто оказалось самым простым.
Для тех, кто читает это, вам нужно добавить любые субдомены в ваш DNS. А для конфигурации nginx вы используете что-то вроде этого:
http {
upstream django {
ip_hash;
server 127.0.0.1:3030;
}
upstream trac {
ip_hash;
server 127.0.0.1:3031;
}
server {
listen 80;
server_name mydomain.com;
location / {
uwsgi_pass django;
include uwsgi_params;
}
}
server {
listen 80;
server_name trac.mydomain.com;
location / {
uwsgi_pass trac;
include uwsgi_params;
}
}
Для тех, кто ищет,
с fastcgi (и, я полагаю, аналогичным образом для wsgi) это также можно сделать следующим образом, аналогично http://wiki.nginx.org/FcgiZope:
location /trac {
fastcgi_pass unix:/path/to/socket;
if ($uri ~ ^/trac/(.*)) {
set $path_info /$1;
}
include fastcgi_params;
fastcgi_param SCRIPT_NAME "/trac";
fastcgi_param PATH_INFO $path_info;
}
; или без дополнительного if
:
location ~ ^/trac(?<path_info>/.*)$ {
fastcgi_pass unix:/path/to/socket;
include fastcgi_params;
fastcgi_param SCRIPT_NAME "/trac";
fastcgi_param PATH_INFO $path_info;
}
,