在服务器上,我有一个运行odoo的docker容器(来自官方图片)。我想通过https proxiying在网址http://myserver.com/odoo上访问它。我有一个nginx docker容器应该这样做。
Odoo容器已启动
docker run --name odootest --link dbodoo:db -t odoo
Nginx容器已使用--link odootest:odoo
启动。
这是我的nginx配置文件
upstream odoo {
server odoo:8069;
}
# this one for the http to https rewrite
server {
listen 80;
listen [::]:80 default ipv6only=on;
rewrite ^/.*$ https://$host$request_uri? permanent;
access_log /var/log/nginx/initial.log;
error_log /var/log/nginx/initialerror.log;
rewrite_log on;
}
#this one for the proper nginx job
server {
listen 443 ;
<... ssl certificates part >
location ^~ /odoo/ {
proxy_pass http://odoo/;
# force timeouts if the backend dies
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503;
# set headers
proxy_set_header Host $host/odoo/;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forward-For $proxy_add_x_forwarded_for;
# Let the OpenERP web service know that we're using HTTPS, otherwise
# it will generate URL using http:// and not https://
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Script-Name /odoo/;
proxy_redirect http://myserver.com/ https://myserver.com/odoo/;
}
}
请求本身的一切正常,但是找不到图像,jquery和js脚本,因为odoo容器返回的html代码看起来像
<script src="/web/static/lib/es5-shim/es5-shim.min.js" type="text/javascript"></script>
<script src="/web/static/lib/underscore/underscore.js" type="text/javascript"></script>
并且导航器正在查找myserver.com/web/static/...
个位置,而不是myserver.com/odoo/web/static...
我认为这可以通过我的位置部分中的所有proxy_header语句来管理,但似乎没有。最好的方法是什么?
答案 0 :(得分:0)
您在代码中使用绝对网址,您应该使用相对网址,例如:
<script src="/web/static/lib/es5-shim/es5-shim.min.js" type="text/javascript"></script>
<script src="/web/static/lib/underscore/underscore.js" type="text/javascript"></script>
应改为:
<script src="web/static/lib/es5-shim/es5-shim.min.js" type="text/javascript"></script>
<script src="web/static/lib/underscore/underscore.js" type="text/javascript"></script>
这样,通过https://myserver.com/odoo/
图片/ js / css访问的网站将在https://myserver.com/odoo/web/static/lib/es5-shim/es5-shim.min.js