IT-Swarm.Net

Làm cách nào để đặt index.html làm tệp gốc trong Nginx?

Cách đặt index.html cho tên miền, ví dụ: https://www.example.com/ - dẫn người dùng đến index.html trong thư mục gốc. 

Tôi đã thử những thứ khác nhau như: 

server {
    # some configs

    location = / {
            index index.html;
            fastcgi_index index.html;
    }
or 
    location / {
            index index.html;
            fastcgi_index index.html;
    }

}

Không có gì giúp tôi. 

Có một số cấu hình khác với từ khóa vị trí, mặc dù tôi cũng đã nhận xét chúng.

Các cấu hình "vị trí" khác trong mệnh đề server {

location ~ .*(css|htc|js|bmp|jp?g|gif|ico|cur|png|swf|htm?|html)$ {
        access_log off;
        root $www_root;
}

location ~ \.php$
{
        include                         /etc/nginx/fastcgi_params;
        index                           index.html;
        fastcgi_index                   index.html;
        fastcgi_param SCRIPT_FILENAME   $www_root$fastcgi_script_name;
        fastcgi_param QUERY_STRING      $query_string;
        fastcgi_param PATH_INFO         $fastcgi_path_info;
        fastcgi_pass                    127.0.0.1:9000;
        # Директива определяет что ответы FastCGI-сервера с кодом больше или равные 400
        # перенаправлять на обработку nginx'у с помощью директивы error_page
        fastcgi_intercept_errors        on;
        break;
}

location ~ /\.ht {
    deny all;
}

Tất cả đều được bình luận và không bị làm phiền, nhưng không có gì giúp được.

Phiên bản PS đã được thực hiện trong tệp /etc/nginx/sites-enables/domainname.com.

36
Arthur Kushman

Câu trả lời là đặt thư mục gốc đến các chỉ thị vị trí:

root   /srv/www/ducklington.org/public_html;
16
Arthur Kushman

Lưu trữ đám mây nhanh chóng, đáng tin cậy và giá cả phải chăng

Đăng ký và nhận $50 tiền thưởng trong vòng 30 ngày!

trong khối vị trí của bạn, bạn có thể làm:

location / {
  try_files $uri $uri/index.html;
}

sẽ cho ngingx tìm kiếm một tệp có tên chính xác được đặt trước và nếu không tìm thấy tệp nào như vậy, nó sẽ thử uri/index.html. Vì vậy, nếu một yêu cầu cho https://www.example.com/ xuất hiện, nó sẽ tìm một tệp chính xác khớp trước và không tìm thấy sau đó sẽ kiểm tra index.html

39
cobaco

location / { là vị trí chung nhất (với location {). Nó sẽ phù hợp với bất cứ điều gì, AFAIU . Tôi nghi ngờ rằng sẽ có ích khi có location / { index index.html; } vì có nhiều nội dung trùng lặp cho mỗi thư mục con của trang web của bạn.

Cách tiếp cận với 

try_files $ uri $ uri/index.html index.html;

là xấu, như đã đề cập trong một nhận xét ở trên, vì nó trả về index.html cho các trang không tồn tại trên trang web của bạn (mọi khả năng $uri sẽ kết thúc ở đó) . chuyển hướng trong đối số cuối cùng của try_files

Cách tiếp cận của bạn 

location = / {
   index index.html;

cũng tệ, vì index cũng thực hiện chuyển hướng nội bộ. Trong trường hợp bạn muốn điều đó, bạn sẽ có thể xử lý việc đó trong một location cụ thể. Tạo ví dụ.

location = /index.html {

như đã đề xuất ở đây . Nhưng sau đó, bạn sẽ có một liên kết làm việc http://example.org/index.html, có thể không mong muốn. Một biến thể khác, mà tôi sử dụng, là:

root /www/my-root;

# http://example.org
# = means exact location
location = / {
    try_files /index.html =404;
}

# disable http://example.org/index as a duplicate content
location = /index      { return 404; }

# This is a general location. 
# (e.g. http://example.org/contacts <- contacts.html)
location / {
    # use fastcgi or whatever you need here
    # return 404 if doesn't exist
    try_files $uri.html =404;
}

P.S. Rất dễ dàng để gỡ lỗi nginx (nếu nhị phân của bạn cho phép điều đó). Chỉ cần thêm vào khối server {:

error_log /var/log/nginx/debug.log debug;

và thấy ở đó tất cả các chuyển hướng nội bộ, vv.

27
Yaroslav Nikitenko

Theo tài liệu Kiểm tra sự tồn tại của các tệp theo thứ tự được chỉ định và sử dụng tệp tìm thấy đầu tiên để xử lý yêu cầu; việc xử lý được thực hiện trong bối cảnh hiện tại. Đường dẫn đến một tệp được xây dựng từ tham số tệp theo các chỉ thị gốc và bí danh. Có thể kiểm tra sự tồn tại của thư mục bằng cách chỉ định dấu gạch chéo ở cuối tên, ví dụ: Mùi $ uri/Nếu không có tệp nào được tìm thấy, một chuyển hướng nội bộ đến uri được chỉ định trong tham số cuối cùng được thực hiện. Quan trọng

một chuyển hướng nội bộ đến uri được chỉ định trong tham số cuối cùng là thực hiện.

Vì vậy, trong tham số cuối cùng, bạn nên thêm trang hoặc mã của mình nếu hai tham số đầu tiên trả về sai. 

location / {
  try_files $uri $uri/index.html index.html;
}
4
Nokors

Đối với tôi, chỉ thị try_files trong câu trả lời (hiện được bình chọn nhiều nhất) https://stackoverflow.com/a/11957896/608359 dẫn đến các chu kỳ viết lại,

*173 rewrite or internal redirection cycle while internally redirecting

Tôi đã có may mắn hơn với chỉ số chỉ số. Lưu ý rằng tôi đã sử dụng một dấu gạch chéo về phía trước tên, có thể hoặc không thể là những gì bạn muốn.

server {
  listen 443 ssl;
  server_name example.com;

  root /home/dclo/example;
  index /index.html;
  error_page 404 /index.html;

  # ... ssl configuration
}

Trong trường hợp này, tôi muốn tất cả các đường dẫn đến /index.html, kể cả khi trả về 404.

0
Douglas Lovell