我正在尝试使用nginx
来提供给我的静态网站。其文件夹结构如下:
static_website/
index.html
www.example.com/
resources.example.com/
uploads.example.com/
根目录中的index.html
文件是由httrack
生成的文件,它仅包含对www.example.com/index.html
的重定向。
文件夹www.example.com
内是所有html
文件,其他两个文件夹是css
,javascript
和image
文件。
这是nginx的配置:
server {
index index.php index.html index.htm;
server_name example.com;
location / {
root /var/www/static_website/www.example.com;
try_files $uri $uri/ =404;
index index.html;
}
}
我可以浏览页面,但是没有加载CSS,JavaScript和图像文件。 html内css文件之一的路径如下:
href="../resources.example.com/style.css"
我设法做到这一点的唯一方法是拥有这样的网址:
example.com/www.example.com/
这样,所有路径都是正确的。我想避免这种情况,只提供example.com。 有办法吗?
答案 0 :(得分:1)
该网站最初旨在使用//example.com/www.example.com/
这样的丑陋URL进行操作。
但是相对于/
,资源的相对路径URI应该可以正常工作,您只需要提供一个与location
匹配的/resources.example.com/
块即可。
例如:
location / {
root /var/www/static_website/www.example.com;
try_files $uri $uri/ =404;
index index.html;
}
location /resources.example.com/ {
root /var/www/static_website;
}
我最初评论过,您应该尝试以下操作:
location ~ \.(css|js|jpg|png|svg)$ {
root /var/www/static_website;
}
达到了类似的目标,但是Nginx将比正则表达式位置更有效地处理前缀位置。
答案 1 :(得分:0)
我想与其他遇到类似问题的人分享我在这个问题上的经验,因为解决方案对我而言不是很明显
我的设置和问题尤其与cloudlflare设置有关,我用来利用TLS而不是在我的2个站点之一的原始服务器上处理它。如果您是从支持加密的CDN服务站点的,并且在原始站点上使用nginx,请考虑以下设置:
p4 unshelve -s <target-CL>
static1 在源中设置了letsencrypt来处理tls连接
static2 是在没有任何TLS配置的情况下在原始位置设置的
从左到右,这是适当的cloudlfare TLS模式,使我可以通过nginx访问正确的文件
完全和灵活之间的区别在于,完全模式允许源服务器处理证书。
最初,我将static2站点配置为已满,缺少443的侦听指令,导致nginx改为为static1服务。
我意识到最初的问题与CDN或cloudflare无关,但是这种方案/协议不匹配使我花费了几个小时,并且我希望从类似的悲痛中拯救别人
老实说,令我惊讶的是,nginx不会坚持在server_name上进行匹配,并且即使未指定default_server,oit也会在方案上隐式地作为后备匹配(或至少出现),甚至在引导日志中也没有任何有意义的消息!调试nginx有时是一场噩梦。