在Nginx中提供静态网站,静态文件路径错误

时间:2019-03-13 14:38:40

标签: nginx nginx-config

我正在尝试使用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文件,其他两个文件夹是cssjavascriptimage文件。

这是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。 有办法吗?

2 个答案:

答案 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访问正确的文件

enter image description here

完全灵活之间的区别在于,完全模式允许源服务器处理证书。

最初,我将static2站点配置为已满,缺少443的侦听指令,导致nginx改为为static1服务。

我意识到最初的问题与CDN或cloudflare无关,但是这种方案/协议不匹配使我花费了几个小时,并且我希望从类似的悲痛中拯救别人

老实说,令我惊讶的是,nginx不会坚持在server_name上进行匹配,并且即使未指定default_server,oit也会在方案上隐式地作为后备匹配(或至少出现),甚至在引导日志中也没有任何有意义的消息!调试nginx有时是一场噩梦。

相关问题