欢迎来到海上华帆的博客园子

记录一些学习过程中的心得体会,供自己和有缘人参考!

Django+nginx+静态网站

问题

  • 我用ubuntu系统ip:192.168.2.101,安装nginx作为服务器。有hugo生成的静态网站,nginx设置监听1313端口,用浏览器地址http://192.168.2.101:1313是可以正常访问这个静态网站的。同时系统内安装了django项目,django项目用浏览器地址http://192.168.2.101也是可以正常访问的。现在有一个需求,假如django模板文件中需要做一个链接,点击后可以直接转入到静态网站的地址http://192.168.2.101:1313的,这个链接怎么做?是否还需要其他设置?
  • 因为使用proxy_pass只是返回http://127.0.0.1:1313/的内容,而且返回的内容容易出错,没有静态文件。实际的访问地址也并未改变,因此我想要的效果是点击链接后,是出现直接的地址跳转,如何才能实现?

因为使用proxy_pass只是返回http://127.0.0.1:1313/的内容,而且返回的内容容易出错,没有静态文件。因此我想要的效果是点击链接后,是出现直接的地址跳转,如何才能实现?

为了实现点击链接后直接跳转到指定的地址,而不是通过 Nginx 代理,你可以简单地在 Django 模板中使用绝对 URL 链接。这种方法非常直接,并且不会涉及到任何代理设置。

以下是一些具体的实现方式:

  1. 直接在 Django 模板中使用绝对 URL
    你可以在 Django 模板中直接编写一个链接,指向你静态网站的地址。

    <a href="http://192.168.2.101:1313" target="_blank">访问静态网站</a>
    

    这将使用户点击链接后,浏览器直接跳转到 http://192.168.2.101:1313

  2. 使用 Django 的 url 模板标签(如果你想在 URL 中使用动态部分):
    如果你希望链接在 Django 中更灵活,可以在 urls.py 中定义一个视图,该视图只做一个简单的重定向:

    你的 urls.py 中
    from django.urls import path
    from django.views.generic import RedirectView
    
    urlpatterns = [
        # 其他 URL 模式
        path('redirect-to-hugo/', RedirectView.as_view(url='http://192.168.2.101:1313'), name='redirect-to-hugo'),
    ]
    

    然后在你的模板中使用这个 URL:

    <a href="{% url 'redirect-to-hugo' %}" target="_blank">访问静态网站</a>
    
  3. 配置 Nginx 进行重定向
    如果你希望通过 Nginx 实现重定向,而不是内容代理,可以使用 return 指令:

    server {
        listen 80;
        server_name example.com;
    
        location / {
            include uwsgi_params;
            uwsgi_pass unix:/home/lyh/aipw/aipw.sock;
        }
    
        location /stack/ {
            return 301 http://192.168.2.101:1313/;
        }
    }
    

    这种方式会在用户访问 http://example.com/hugo/ 时,直接重定向到 http://192.168.2.101:1313/,并在浏览器地址栏中显示新的 URL。

通过以上方法,你可以实现点击链接后直接跳转到指定的地址,而不是通过 Nginx 代理内容。

posted @ 2024-06-30 08:41  海上华帆  阅读(12)  评论(0编辑  收藏  举报