Nginx + Apache trailing slash redirect [đã đóng]


8

Tôi có một Nginxmáy chủ đang chạy trên 80cổng làm việc như một proxy Apache 2.2đang lắng nghe127.0.0.1:8080

Khi tôi truy cập http://hostname/subfolder/nó hoạt động tuyệt vời.
Khi tôi truy cập http://hostname/subfoldernó chuyển hướng cho tôi http://hostname:8080/subfolder/là sai.

Theo như tôi thấy, chuyển hướng sai được trả về bởi Apache nhưng UseCanonicalNameUseCanonicalPhysicalProxycả hai đều được đặt thànhOff

Bất kỳ ý tưởng về cách khắc phục điều đó?


Vấn đề có vẻ là với cấu hình nginx của bạn khi bạn truy cập vào cổng 80 mà không có dấu gạch chéo dẫn đến chuyển hướng đến cổng 8080. UNLESS nginx của bạn được ủy quyền cho Apache và Apache đang yêu cầu chuyển hướng.
PP.

Tôi sử dụng nginx làm proxy
quark

Câu trả lời:


5

Tôi cũng gặp phải vấn đề này và tôi đã có thể sửa nó bằng lệnh proxy_redirect ngay sau lệnh proxy_pass của tôi trong cấu hình nginx của tôi:

proxy_redirect http://example.com:8080/ http://example.com/ 

Đây là cấu hình nginx đầy đủ của tôi (Trong trường hợp của tôi, Apache nằm trên cổng 81 và lưu trữ hai trang web. Tôi đã thêm hai dòng proxy_redirect dành riêng cho trang web vì tôi không chắc chắn cách thêm một trang chung chung.)

server {
    listen 80;

    access_log /var/log/nginx/apache-proxy.access.log;

    location / {
        proxy_pass http://localhost:81;

        #fix for apache redirects that include the port number
        proxy_redirect http://nfriedly.com:81/ http://nfriedly.com/;
        proxy_redirect http://misticflame.com:81/ http://misticflame.com/;

        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        client_max_body_size 10m;
        client_body_buffer_size 128k;
        proxy_connect_timeout 6000;
        proxy_send_timeout 6000;
        proxy_read_timeout 6000;
        proxy_buffer_size 4k;
        proxy_buffers 4 32k;
        proxy_busy_buffers_size 64k;
        proxy_temp_file_write_size 64k;
        send_timeout 6000;
        proxy_buffering off;
        proxy_next_upstream error;

    }
}

Lưu ý: Đây là phiên bản tiền 1.0 của nginx 5+ năm trước. Đây là tài liệu cho proxy_redirect cho phiên bản hiện tại: http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_redirect


việc thêm proxy_redirect sẽ gây ra lỗi cú pháp
TomSawyer

Đây là một phiên bản khá cũ của nginx. Tôi không còn sử dụng nginx (chỉ là nội dung tĩnh trên các trang github cho trang cá nhân của tôi), nhưng tôi đã cập nhật câu trả lời bằng một liên kết đến các tài liệu proxy_redirect hiện tại.
Nathan Friedly

Bằng cách này, bạn vẫn nhận được nó chậm hơn vì chuyển hướng
TomSawyer

2

Nếu chỉ thị Tên máy chủ của bạn trên Apache được đặt thành "tên máy chủ: 8080", hãy xóa ": 8080" hoặc thay đổi thành "tên máy chủ: 80". Bạn cũng có thể thêm "proxy_set_header Host $ host: 80"


1

Tôi đã gặp vấn đề này từ lâu .. Vì tôi nhớ nó phải làm với HTTP RFC, dấu gạch chéo ở cuối biểu thị một thư mục (/ test /), không có dấu gạch chéo ở cuối tệp (/ test)

Câu chuyện dài, thêm một quy tắc viết lại sẽ thêm dấu gạch chéo vào yêu cầu, nếu không có.

nhìn vào Solved: dấu gạch chéo vấn đề với máy chủ Nginx

HTP


1

Tôi gặp vấn đề chính xác gần đây. Trong khi các giải pháp được đề xuất sẽ hoạt động, Nginx cung cấp một giải pháp tích hợp:

proxy_redirect default;

Tài liệu tại http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_redirect

Đây là một ví dụ đầy đủ về cách sử dụng nó:

server {
  listen 80;
  location / {
    proxy_pass http://localhost:8080
    proxy_redirect default
  }
}

0

Có lẽ nginx không thiết lập các tiêu đề proxy để nói với apache rằng yêu cầu ban đầu trông như thế nào.

Trong nginx:

proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

Xem http://wiki.nginx.org/LikeApache

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.