我已经经历了一些以前的线程: 如何在nginx中使用Django设置子目录如何在nginx 后面的子区域下部署django在 子目录nginx + uwsgi上服务烧瓶app
基本的教训是,您只需要配置您的站点(可用)即可实现此目的.我现在尝试了各种各样的排列
server {
listen 80;
server_name www.example.com;
location = /favicon.ico {
access_log off;
log_not_found off;
}
location /static/ {
root /path/to/project;
}
location /project/ {
root /path/to/project;
include /etc/nginx/uwsgi_params;
uwsgi_param SCRIPT_NAME /project;
uwsgi_modifier1 30;
uwsgi_param PATH_INFO "$1";
uwsgi_pass unix:/tmp/project.sock;
}
}
Run Code Online (Sandbox Code Playgroud)
当我将location定义为"/"时,一切都运行得很好(并删除SCRIPT_NAME,modifier1,PATH_INFO和root并不重要.但是尝试使用子目录总是会导致找不到页面(404):
Request URL: http://www.example.com/project/project
Run Code Online (Sandbox Code Playgroud)
(编辑)它正在为请求添加目录.我怎么不搞清楚?
(尝试过forced_script_name - 不应该使用它并给出其他类型的头痛 - 和uwsgi配置设置)
编辑:
location /project/ {
root /path/to/project;
include /etc/nginx/uwsgi_params;
uwsgi_param SCRIPT_NAME /project;
uwsgi_pass unix:/tmp/project.sock;
}
Run Code Online (Sandbox Code Playgroud)
不工作......套接字在那里,当我配置/时工作 - 我只是看不到我错过的东西.
更新:
location ~ /project(?<path_info>/.*|$) { …Run Code Online (Sandbox Code Playgroud) 我已将Django项目部署在服务器上的子目录中(dns_name_of_my_page/notes).我可以通过dns_name_of_my_page/notes/app /访问此项目中的应用.不幸的是,如果整个Django项目位于托管服务器上的public_html中的子目录'notes'中,则admin站点无效.当我进入管理站点(dns_name_of_my_page/notes/admin /)时,重定向到URL而没有子目录的名称(dns_name_of_my_page/adminlogin /?next = // admin /),这是不可接受的.它应该是dns_name_of_my_page/notes/adminlogin /?next =/notes/admin /
这是我在项目中的URL配置:
urlpatterns = [
url(r'^/?app/?', include('app.urls')),
url(r'^/?$', views.index, name='index'),
url(r'^/?admin/?', admin.site.urls),
]
Run Code Online (Sandbox Code Playgroud)
以下是我的应用中的网址配置:
urlpatterns = [
url(r'^$', views.index, name='index'),
url(r'^(?P<num>[0-9]+)/?', views.num, name='num'),
]
Run Code Online (Sandbox Code Playgroud)
我试过设置
FORCE_SCRIPT_NAME = '/notes/'
Run Code Online (Sandbox Code Playgroud)
要么
SUB_SITE = "/notes/"
Run Code Online (Sandbox Code Playgroud)
在settings.py但它没有帮助我.
你有没有在子目录中运行Django应用程序的这种问题?