我正在对一组服务进行重大的重写/更新,并努力让 Apache/Nginx/Django 相互兼容。
这里发生的事情是,有一个使用 Django 编写的内部应用程序和 API 端点,并通过 mod_wsgi 挂接到 Apache。所有这些都在端口 8080 上运行。按照 Django 最佳实践,我使用 nginx 作为代理来提供静态资产,同时让根内容转到 Django 应用程序。因此,nginx 正在监听端口 80,并将任何不以 8080 开头的流量路由/static/
到端口 8080。
我们有一个带有自定义插件的 wordpress 网站,该插件使用 Django 应用程序中的端点。我想要做的是让 wordpress 在端口 8091 上运行,但要有类似于localhost/wp/
访问 WP 站点的任何 URL。
不幸的是,现在我每次尝试通过端口 80 访问各个站点时都会收到 404 错误。点击localhost:8080
并localhost:8091
显示预期的应用程序,但不是通过直接localhost
。
nginx.conf:
upstream backend {
server localhost:8080;
}
server {
listen 80;
server_name www.staging.com staging.com staging-local;
access_log /home/mainuser/projects/update/logs/nginx_access.log;
error_log /home/mainuser/projects/update/logs/nginx_error.log info;
location /wp/ {
proxy_pass http://localhost:8901;
include /etc/nginx/proxy_params;
}
location /static/ {
root /home/mainuser/projects/update/server/data/static;
}
location / {
proxy_pass http://localhost:8080;
include /etc/nginx/proxy_params;
}
}
代理参数:
proxy_redirect off;
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;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
答案1
你指向的地方有一个未使用的upstream
名称backend
没有什么目前。直接从Nginxupstream
文档:
upstream backend {
server backend1.example.com weight=5;
server backend2.example.com:8080 fail_timeout=5s slow_start=30s;
server backend3.example.com resolve;
server backup1.example.com:8080 backup;
server backup2.example.com:8080 backup;
}
server {
location / {
proxy_pass http://backend;
}
}
port
在 中设置,upstream
而不是proxy_pass
指令。