选择位置块时出现Nginx错误

时间:2017-11-29 03:01:15

标签: nginx web configuration server

所以,我正在用Gitbook建立一个网站。它遇到了Nginx配置问题。基本上,我想形成一个标准,当人们访问时:book.domain.com/book_name,它将重定向到该特定的书。但是,我对Nginx很新,我写的位置块不正确。我将在下面有目录树。

book/
├── [root     4.0K]  _book/
│   ├── [root     4.0K]  gitbook/
│   ├── [root     5.9K]  index.html
│   └── [root      970]  search_index.json
├── [root     4.0K]  book_name
│   ├── [root     4.0K]  _book/
│   │   ├── [root     4.0K]  gitbook/
│   │   ├── [root     5.9K]  index.html
│   │   └── [root      568]  search_index.json
│   ├── [root       16]  README.md
│   └── [root       40]  SUMMARY.md
├── [root       45]  README.md
└── [root       40]  SUMMARY.md

值得一提的是本书下的_book是该网站的主要目录,我将有超链接重定向到其他书籍。 book_name下的_book将成为本书。

这是Nginx的配置,我认为$ uri中包含book_name,所以我只能访问$ uri下的_book文件夹并获取index.html文件。这将产生500错误。

server {
    listen 80;
    listen [::]:80;
    server_name book.domain.com;

    location /.well-known/acme-challenge {
        root /var/www/domain.com/book/_book;
    }

    return 301 https://book.domain.com$request_uri;
}

server {
    listen 443 ssl;
    listen [::]:443 ssl;
    server_name book.domain.com;

    ssl_certificate /etc/letsencrypt/live/book.domain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/book.domain.com/privkey.pem;

    root /var/www/domain.com/book;
    index index.html;

    location / {
        try_files _book/ $uri/_book/;
    }
}

但是,我还尝试了另一种方法来添加另一个位置块来编写它,但它也无法正常工作。这会给我404错误。

location /book_name {
    root /var/www/domain.com/book_name;
}

我在想也许重写是正确的方法吗?在编写位置块时真的很困惑。这样做的正确方法是什么?

新修改

我发现了一种显示页面的方法,但奇怪的是它没有正确地使用js和css进行渲染。我所做的更改如下:

location / {
    try_files $uri/_book/index.html /_book/index.html =404;
}

所有js和css文件都在gitbook目录下。

gitbook
├── [root     4.0K]  fonts
│   └── [root     4.0K]  fontawesome
│       ├── [root     122K]  FontAwesome.otf
│       ├── [root      75K]  fontawesome-webfont.eot
│       ├── [root     382K]  fontawesome-webfont.svg
│       ├── [root     149K]  fontawesome-webfont.ttf
│       ├── [root      88K]  fontawesome-webfont.woff
│       └── [root      70K]  fontawesome-webfont.woff2
├── [root     103K]  gitbook.js
├── [root     4.0K]  gitbook-plugin-fontsettings
│   ├── [root     6.3K]  fontsettings.js
│   └── [root     8.4K]  website.css
├── [root     4.0K]  gitbook-plugin-highlight
│   ├── [root     2.8K]  ebook.css
│   └── [root      31K]  website.css
├── [root     4.0K]  gitbook-plugin-lunr
│   ├── [root      15K]  lunr.min.js
│   └── [root     1.6K]  search-lunr.js
├── [root     4.0K]  gitbook-plugin-search
│   ├── [root      15K]  lunr.min.js
│   ├── [root      974]  search.css
│   ├── [root     1.2K]  search-engine.js
│   └── [root     6.2K]  search.js
├── [root     4.0K]  gitbook-plugin-sharing
│   └── [root     2.8K]  buttons.js
├── [root     4.0K]  images
│   ├── [root     4.7K]  apple-touch-icon-precomposed-152.png
│   └── [root     4.2K]  favicon.ico
├── [root      51K]  style.css
└── [root     111K]  theme.js

在index.html中,有一些指向nessary文件的链接。

如果我没有在try_files之后放入index.html,该页面将向我返回404错误。但是,通常它会使用css和js加载页面。

1 个答案:

答案 0 :(得分:0)

rstr()文件位于index.html,资源文件与之相关。

您当前使用/var/www/domain.com/book/<book_name>/_book/index.html的解决方案将与索引文件一起使用,但无法找到资源。

一种解决方案是将所需的URI重定向到包含try_files组件的URI,然后使用简化的_book语句查找索引和资源文件:

try_files

第一个位置块处理包含index index.html; root /var/www/domain.com/book; location ~ /_book/ { try_files $uri $uri/ =404; } location / { rewrite ^(.*?)/?$ $1/_book/ redirect; } 组件的URI,该组件是_book文件和所有资源文件的最终URI。

第二个位置区将index.html重定向到//book.domain.com/book_name

有关详情,请参阅https://docs.python.org/2/library/glob.html

以下解决方案使用//book.domain.com/book_name/_book/alias插入路径名中,以便它不会显示在公开的URI中。

但是,主目录索引和资源文件的URI是不明确的,例如:_book是指主目录的资源文件还是名为“gitbook”的书? /gitbook/search_index.json要求URI明确无误。

因此,以下解决方案仅在主目录的URI中使用nginx

/_book/

有关详情,请参阅this document