django- nginx: [emerg] open() "/etc/nginx/proxy_params" 在 /etc/nginx/sites-enabled/myproject:11 中失败(2:没有这样的文件或目录)
django- nginx: [emerg] open() "/etc/nginx/proxy_params" failed (2: No such file or directory) in /etc/nginx/sites-enabled/myproject:11
我尝试使用 Nginx 和 Gunicorn 使用 this tutorial 部署一个 django 项目。我完成了所有待办事项,但是,当我使用以下代码创建 /etc/nginx/sites-available/myproject
文件时:
server {
listen 80;
server_name server_domain_or_IP;
location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
root /home/sammy/myproject;
}
location / {
include proxy_params;
proxy_pass http://unix:/home/sammy/myproject/myproject.sock;
}
}
然后 运行 sudo nginx -t
查找错误,我得到这个错误:
nginx: [emerg] open() "/etc/nginx/proxy_params" failed (2: No such file or directory) in /etc/nginx/sites-enabled/myproject:11
nginx: configuration file /etc/nginx/nginx.conf test failed
我该如何解决这个问题?
您在 proxy_params
99% 的时间里得到的路径是错误的(根据我的经验),proxy_params
文件的默认位置是 /etc/nginx/proxy_params
,但事实并非如此。你好像不太一样
proxy_params
文件包含以下内容:
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
这些参数用于将信息转发到您要代理的应用程序。我曾使用过没有 proxy_params
文件的旧 CentOS
服务器,我没有自己创建文件,而是直接包含了这些参数;位置块看起来像这样:
location / {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://unix:/home/sammy/myproject/myproject.sock;
}
所以这取决于你。如果该文件存在于另一个位置,只需将其包含在正确的位置:
include /path/to/proxy_params
否则您可以将参数直接包含在位置块中(就像我上面所做的那样)
或自己创建一个并将其放入 /etc/nginx
(如果您想坚持使用当前代码)
在ubuntu上安装nginx时,正常情况下会有proxy_params
,路径为/etc/nginx/proxy_params
。但是你的 ubuntu 没有它,所以制作 proxy_params
或添加 proxy_params
有的代码是很好的解决方案,正如 回答的那样。
这一次,我制作了 docker 容器,其中包含 nginx 和 alpine
,它是 linux 发行版之一。但它没有 proxy_params
与 一起使用的 old CentOS
相同。所以我添加了 proxy_params
的代码,这比 proxy_params
.
更简单
似乎某些 linux 发行版或某些旧的 linux 发行版可能没有 proxy_params
。
另外,我看过the tutorial你以前用过。 nginx的配置,最好只在/etc/nginx/conf.d/myproject.conf
处做一个myproject.conf
(不要忘记myproject
后的.conf
,没有.conf
的文件nginx是找不到的).在这种情况下,您不需要在 /etc/nginx/sites-available/myproject
和 /etc/nginx/sites-enabled/myproject
.
处制作两个文件
在我的例子中,我在目录 /etc/nginx/sites-enabled
中有一个名为 myproject
的文件。但是我在目录 /etc/nginx/sites-available
中没有名为 myproject
的文件。我实际上不需要那个 myproject
文件,因为我不是故意创建的。
所以我刚刚使用 sudo rm myproject
从 /etc/nginx/sites-enabled
目录中删除了 myproject
文件,瞧!现在sudo nginx -t
成功了!
我尝试使用 Nginx 和 Gunicorn 使用 this tutorial 部署一个 django 项目。我完成了所有待办事项,但是,当我使用以下代码创建 /etc/nginx/sites-available/myproject
文件时:
server {
listen 80;
server_name server_domain_or_IP;
location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
root /home/sammy/myproject;
}
location / {
include proxy_params;
proxy_pass http://unix:/home/sammy/myproject/myproject.sock;
}
}
然后 运行 sudo nginx -t
查找错误,我得到这个错误:
nginx: [emerg] open() "/etc/nginx/proxy_params" failed (2: No such file or directory) in /etc/nginx/sites-enabled/myproject:11
nginx: configuration file /etc/nginx/nginx.conf test failed
我该如何解决这个问题?
您在 proxy_params
99% 的时间里得到的路径是错误的(根据我的经验),proxy_params
文件的默认位置是 /etc/nginx/proxy_params
,但事实并非如此。你好像不太一样
proxy_params
文件包含以下内容:
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
这些参数用于将信息转发到您要代理的应用程序。我曾使用过没有 proxy_params
文件的旧 CentOS
服务器,我没有自己创建文件,而是直接包含了这些参数;位置块看起来像这样:
location / {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://unix:/home/sammy/myproject/myproject.sock;
}
所以这取决于你。如果该文件存在于另一个位置,只需将其包含在正确的位置:
include /path/to/proxy_params
否则您可以将参数直接包含在位置块中(就像我上面所做的那样)
或自己创建一个并将其放入 /etc/nginx
(如果您想坚持使用当前代码)
在ubuntu上安装nginx时,正常情况下会有proxy_params
,路径为/etc/nginx/proxy_params
。但是你的 ubuntu 没有它,所以制作 proxy_params
或添加 proxy_params
有的代码是很好的解决方案,正如
这一次,我制作了 docker 容器,其中包含 nginx 和 alpine
,它是 linux 发行版之一。但它没有 proxy_params
与 old CentOS
相同。所以我添加了 proxy_params
的代码,这比 proxy_params
.
似乎某些 linux 发行版或某些旧的 linux 发行版可能没有 proxy_params
。
另外,我看过the tutorial你以前用过。 nginx的配置,最好只在/etc/nginx/conf.d/myproject.conf
处做一个myproject.conf
(不要忘记myproject
后的.conf
,没有.conf
的文件nginx是找不到的).在这种情况下,您不需要在 /etc/nginx/sites-available/myproject
和 /etc/nginx/sites-enabled/myproject
.
在我的例子中,我在目录 /etc/nginx/sites-enabled
中有一个名为 myproject
的文件。但是我在目录 /etc/nginx/sites-available
中没有名为 myproject
的文件。我实际上不需要那个 myproject
文件,因为我不是故意创建的。
所以我刚刚使用 sudo rm myproject
从 /etc/nginx/sites-enabled
目录中删除了 myproject
文件,瞧!现在sudo nginx -t
成功了!