0

我是 Nginx 新手,我已经使用本教程设置了服务器。现在,当我添加指向http://www.anotherwebsite.com等其他网站的链接时,当我从我的页面单击此链接时,服务器会将我定向到http://www.mywebsite.com/http://www.anotherwebsite .com _ 服务器将另一个链接附加到我的网站链接。我该如何改变它。我已经研究了这些地方 如何在 NGINX 中重定向 url,nginx 重写到漂亮的链接, 但我无法让它工作。任何帮助将不胜感激。谢谢

server {
    listen          80;
    server_name     $hostname;
    location /static {
        alias /var/www/<app-name>/static;
    }
    error_page   404              /404.html;
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
    location / {
        include         uwsgi_params;
        uwsgi_pass unix:/tmp/uwsgi.sock;
        uwsgi_param UWSGI_PYHOME /var/www/<app-name>/env;
        uwsgi_param UWSGI_CHDIR /var/www/<app-name>/project;
        uwsgi_param UWSGI_MODULE <project-name>.wsgi:application;
    }      
}
4

1 回答 1

2

您根本没有从您发布的 nginx 配置中进行任何重定向,除了 /static/ 和 /50x.html 之外的所有内容都被传递到 uwsgi 应用程序

因此重定向必须发生在 uwsgi 应用程序中

就从 nginx 内部进行重定向而言,简单的情况是这样的:

location /redirected-path {
  #for 302 redirect
  rewrite ^ http://anotherwebsite.example.com/path-on-other-site redirect; 

   #for 301 redirect
  # rewrite ^ http://anotherwebsite.example.com/path-on-other-site permanent;
}

(更复杂的情况涉及更复杂的正则表达式^

更新:

对,所以从您在下面评论中链接的代码中,您真正想要做的是更改输出的 html 代码锚标记的 href 值。

这样做的正确位置是在后端代码中(即在您要连接的 uwsgi 应用程序中)

您可以通过以下重写来做到这一点:

 location /main {
   rewrite ^/main(.*) http://www.mysite.com$1 permanent;
 }

但这有一个很大的缺点,即需要额外往返服务器,然后客户端会这样做:

  1. 向您的服务器请求
  2. 响应重定向到另一台服务器
  3. 向另一台服务器请求
  4. 来自另一台服务器的响应

而如果您在后端代码中更改它,则不再需要步骤 1 和 2。

除了导致潜在的(取决于连接速度和服务器负载)显着延迟。它还会增加您的服务器负载。

使用服务器重写是一种技巧,除非您无权访问后端代码,否则您真的应该跳过

于 2012-11-08T10:52:25.743 回答