已部署Let's Encrypt SSL与Nginx,Odoo网站为何无法直接跳转HTTPS?
问题分析与解决方案
1. 修复Nginx配置中的问题
你的当前配置存在两个关键问题:
- 缺少主域名
portoko.com的HTTPS和HTTP重定向配置 - HTTP监听的server块存在重复判断逻辑,且错误的
return 404会阻止正常重定向
替换为以下完整配置:
# 子域名 andy.portoko.com HTTPS配置 server { server_name andy.portoko.com; # 强制升级不安全请求 add_header 'Content-Security-Policy' 'upgrade-insecure-requests'; proxy_read_timeout 720s; proxy_connect_timeout 720s; proxy_send_timeout 720s; # Odoo代理模式所需头部 proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Real-IP $remote_addr; # 日志配置 access_log /var/log/nginx/odoo-andy.access.log; error_log /var/log/nginx/odoo-andy.error.log; # 转发请求到Odoo后端 location / { proxy_redirect off; proxy_pass http://odoo; } location /longpolling { proxy_pass http://odoochat; } # Gzip压缩 gzip_types text/css text/less text/plain text/xml application/xml application/json application/javascript; gzip on; client_body_in_file_only clean; client_body_buffer_size 32K; client_max_body_size 500M; sendfile on; send_timeout 600s; keepalive_timeout 300; listen 443 ssl; ssl_certificate /etc/letsencrypt/live/portoko.com-0001/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/portoko.com-0001/privkey.pem; include /etc/letsencrypt/options-ssl-nginx.conf; ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; } # 主域名 portoko.com HTTPS配置 server { server_name portoko.com; add_header 'Content-Security-Policy' 'upgrade-insecure-requests'; proxy_read_timeout 720s; proxy_connect_timeout 720s; proxy_send_timeout 720s; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Real-IP $remote_addr; access_log /var/log/nginx/odoo-main.access.log; error_log /var/log/nginx/odoo-main.error.log; location / { proxy_redirect off; proxy_pass http://odoo; } location /longpolling { proxy_pass http://odoochat; } gzip_types text/css text/less text/plain text/xml application/xml application/json application/javascript; gzip on; client_body_in_file_only clean; client_body_buffer_size 32K; client_max_body_size 500M; sendfile on; send_timeout 600s; keepalive_timeout 300; listen 443 ssl; ssl_certificate /etc/letsencrypt/live/portoko.com/fullchain.pem; # 若主域名证书路径不同,请修改为实际路径 ssl_certificate_key /etc/letsencrypt/live/portoko.com/privkey.pem; include /etc/letsencrypt/options-ssl-nginx.conf; ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; } # HTTP请求统一重定向到HTTPS(包含主域名和子域名) server { listen 80; server_name portoko.com andy.portoko.com; return 301 https://$host$request_uri; }
2. 配置Odoo以生成HTTPS链接
Odoo默认可能生成HTTP格式的内部链接,导致页面跳转回HTTP,需修改Odoo配置文件(通常为/etc/odoo/odoo.conf):
# 开启代理模式 proxy_mode = True # 设置对应域名的base_url,若为同一Odoo实例可配置多个,或依赖反向代理传递的Host web.base.url = https://portoko.com # 若子域名对应单独Odoo实例,添加: # web.base.url = https://andy.portoko.com
3. 生效配置
完成修改后,重启Nginx和Odoo服务:
sudo systemctl restart nginx sudo systemctl restart odoo
内容的提问来源于stack exchange,提问作者micihn
相关产品推荐
相关产品推荐

