账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    关于 Flask nginx 配置 子域名的问题
    • 2020-01-01 00:00
    • 10
    53
    0

    域名 a.cn 俩 子域名 www.a.cn -> PC 站 ,m.a.cn -> 移动站
    不带 www 自动跳转到 www

    Nginx 配置

    
    #user  nobody;
    worker_processes  1;
    
    #error_log  logs/error.log;
    #error_log  logs/error.log  notice;
    #error_log  logs/error.log  info;
    
    #pid        logs/nginx.pid;
    
    
    events {
        worker_connections  1024;
    }
    
    
    http {
        include       mime.types;
        default_type  application/octet-stream;
    
        sendfile        on;
       
        keepalive_timeout  65;
    
        #gzip  on;
    
        server {
            listen       80;
            server_name  a.cn www.a.cn;
            return 301 https://www.a.cn$request_uri;
    
        }
    
        server {
            listen 80;
            server_name m.a.cn;
            return 301 https://m.a.cn;
        }
       
        # HTTPS server
        #
        server {
           listen       443 ssl;
           server_name  www.a.cn;
    
           ssl_certificate      C://nginx//ssl//www.a.cn.crt;
           ssl_certificate_key  C://nginx//ssl//www.a.cn.key;
    
           ssl_session_cache    shared:SSL:1m;
           ssl_session_timeout  1m;
    
           ssl_ciphers  HIGH:!aNULL:!MD5;
           ssl_prefer_server_ciphers  on;
    
           location / {
                proxy_http_version 1.1;
                proxy_set_header Host $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://127.0.0.1:5000;
           }
    
        }
    
        server {
           listen       443 ssl;
           server_name  m.a.cn;
    
           ssl_certificate      C://nginx//ssl//m.a.cn.crt;
           ssl_certificate_key  C://nginx//ssl//m.a.cn.key;
    
           ssl_session_cache    shared:SSL:1m;
           ssl_session_timeout  1m;
    
           ssl_ciphers  HIGH:!aNULL:!MD5;
           ssl_prefer_server_ciphers  on;
    
           location / {
                proxy_http_version 1.1;
                proxy_set_header Host $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://127.0.0.1:5000;
           }
    
        }
    
    }
    

    Flask 配置 域名

    Flask SERVER_NAME = 'a.cn'

    a.cn, m.a.cn 可以访问 ,www.a.cn 无法访问

    Flask 配置:
    app.url_map.default_subdomain = 'www'
    正常访问 但 m.a.cn 也是返回的 www.a.cn 即 PC 页面

    蓝图配置 域名
    删除 app.url_map.default_subdomain = 'www' , 蓝图 增加 subdomain='www' 正常
    唯一的问题 url_for() 获取的绝对路径域名 不带www


    这个配置过程有点凌乱,有没有比较便捷的配置方法,目前设置基本符合条件但就是一个问题 , url_for 获取到的域名怎么带 www

    万分感谢!

    2
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 10 元积分
        全部回答
    • 0
    • 来⊙日无期ε 普通会员 1楼

      在 Flask 中,你可以在 Nginx 配置文件中使用 setsubdomain 配置来设置子域名。

      首先,你需要在 Nginx 配置文件中添加一个 server 对象来配置 Nginx 服务器。在这个对象中,你可以添加一个 subdomain 对象来设置子域名。

      例如,如果你有一个名为 myapp.com 的子域名,你可以添加以下代码来配置 Nginx 服务器:

      ```nginx server { listen 80;

      server_name myapp.com;
      
      location / {
          proxy_pass http://localhost:5000;
      }
      

      } ```

      在这个例子中,myapp.com 是子域名,5000 是 Nginx 服务器的端口。

      然后,你需要在你的 Flask 服务器中使用 url_for 函数来生成对应的 URL。

      例如,如果你有一个名为 myapp.com/users 的用户路由,你可以使用以下代码来生成 URL:

      ```python from flask import url_for

      @app.route('/users/') def users(user_id): return url_for('users', user_id=user_id) ```

      在这个例子中,user_id 是用户的 ID,url_for 函数会返回一个 URL,该 URL 以 users 为前缀,并将 user_id 作为参数传递给。

      注意:你需要确保 Nginx 的 server_name 配置正确,并且子域名的 DNS 记录已经指向 Nginx 服务器。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部