Nginx chuyển hướng đến cổng 8080 khi truy cập url mà không gạch chéo [đã đóng]


19

khi truy cập: http://example.com/somefolder -> http://example.com:8080/somefolder

Tôi đã thử điều này:

 http {
    port_in_redirect off;

Có ý kiến ​​gì không?


Bạn có thể cung cấp cấu hình của bạn? Bạn đang ủy quyền cho một dịch vụ khác đằng sau nginx?
Shane Madden

Tôi tin rằng chúng tôi đang ủy quyền cho apache. Những tập tin cấu hình nào bạn muốn?
Chris Muench

3
Tệp cấu hình nginx xác định serverkhối chứa lệnh proxy_pass. Những gì bạn có thể sẽ cần sẽ là một proxy_redirectchỉ thị - xem cấu hình của bạn sẽ xác nhận.
Shane Madden

Lưu ý rằng một số trình duyệt bộ nhớ cache đổi hướng nên khi thay đổi port_in_redirecttừ onđể offbạn có thể cần phải khởi động lại nó.
nhấn chìm

@emersion port_in_redirecthoàn toàn không hoạt động
TomSawyer

Câu trả lời:


21

Tôi chỉ gặp vấn đề tương tự và port_in_redirect off; thực sự làm việc cho tôi, chỉ cần chắc chắn rằng bạn sử dụng nó trong server {}khối.

server {
  listen 8080;
  server_name example.com;

  port_in_redirect off;
  autoindex on;

  location / {
    root /var/www/example.com;
    index index.html;
  }
}

Hoặc thậm chí sử dụng port_in_redirectbên trong location.
wqw

đã làm việc hoàn hảo để lưu trữ nginx trên 8080 đằng sau một bộ cân bằng tải. cảm ơn bạn
xxstevenxo

cũng làm việc cho tôi, cảm ơn rất nhiều vì sự giúp đỡ của bạn
h3nr1ke

4

Điều này sẽ khắc phục vấn đề. Thêm proxy_redirectchỉ thị ngay sau proxy_passchỉ thị

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


3

Nếu ai đó vẫn gặp phải sự cố này trong khi gặp phải lỗi sau thiết lập proxy ngược nginx, bạn có thể thử ff:

  vị trí / {
    proxy_redirect tắt;
    proxy_set_header Máy chủ lưu trữ $ host: $ server_port; # <- cái này đã giải quyết của tôi
    proxy_set_header X-Forwarded-Host $ http_host;
    proxy_set_header X-Real-IP $ remote_addr;
    proxy_set_header X-Forwarded-For $ proxy_add_x_forwarded_for;
    proxy_pass http://127.0.0.1:8083 ;
  }
  

Thiết lập của tôi là tôi cho phép Apache nghe 127.0.0.1:8083 và để nginx proxy yêu cầu nó.


2

Tôi gặp vấn đề tương tự với thiết lập nginx + Apache của tôi. Apache dường như đang chuyển hướng đến cổng riêng của nó (chạy trên 8080), trong khi nginx ở cổng 80.

Trong thiết lập của tôi, điều này đã tạo vòng lặp chuyển hướng vô hạn cho các url thông thường :

proxy_set_header Host $host:80; # Force port 80

Thay vào đó, liên kết dữ liệu trả về cổng 80, như thế này:

proxy_bind $host:80; # Bind to port 80

Đây là khối máy chủ nginx của tôi:

server {
    listen 80;
    listen [::]:80 ipv6only=on;

    server_name _; # Wildcard server

    location / {
        proxy_bind $host:80; # Bind to port 80 << THIS IS THE MAGIC
        proxy_pass http://localhost:8080;
        proxy_set_header Host            $host; # Pass host header
        proxy_set_header X-Real-IP       $remote_addr; # Preserve client IP
        proxy_set_header X-Forwarded-For $remote_addr;
    }
}

Với thiết lập ký tự đại diện này, tất cả các yêu cầu nginx không có khối máy chủ được chuyển cho Apache.


Hoàn toàn không hoạt động
TomSawyer

1

Trong trường hợp bất kỳ ai khác gặp phải vấn đề này - bài viết ở đây: http://www.linuxquestions.org/questions/linux-server-73/strange-nginx-redirects-without-trailing-slash-930876/ giải quyết vấn đề cho tôi .

Tôi đã phải thêm một tiêu đề bổ sung trong proxy.

Hãy chắc chắn rằng bạn có các thiết lập máy chủ để $http_hostvà cũng là bạn đã thiết lập X-Forwarded-Hostđể $http_hostthích dưới đây:

proxy_redirect off;
proxy_set_header Host $http_host;             # <-- make sure this is $http_host
proxy_set_header X-Forwarded-Host $http_host; # <-- make sure you set this
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 16k;
proxy_buffers 32 8k;
proxy_busy_buffers_size 64k;

Nó hoàn toàn không hoạt động
TomSawyer

1

Tôi nghĩ ví dụ đơn giản này là đủ:

location = /somefolder {
    return 302 http://$host:8080/somefolder;
}


0

Tôi đã có một vấn đề tương tự.

Có lẽ bạn nên sử dụng chỉ thị proxy_set_headerđể đặt máy chủ và vị trí của tiêu đề. Trong cấu hình của tôi, tôi đã thêm proxy_set_header Location $host:80; và tất cả các yêu cầu trả lại cổng 80 bây giờ.


Tôi tin rằng điều này sẽ phá vỡ các chuyển hướng vượt ra ngoài "/" - mọi chuyển hướng sẽ trỏ đến $ host: 80
perrierism

0

Vấn đề này là do Nginx tự động dịch đường dẫn tương đối sang đường dẫn tuyệt đối, phải không?
Có một cách để nói Nginx không dịch, bạn thêm một khoảng trắng trước dấu gạch chéo: ngx.redirect(" /foo")


Xin lưu ý rằng đây là một câu hỏi từ 3 năm trước.
Deer Hunter

-1

Tôi muốn giới thiệu thay vì thêm nó vào khối máy chủ của bạn:

rewrite /wp-admin$ $scheme://$host$uri/ permanent;

Đây là khi bạn truy cập example.com/wp-admin, nó sẽ chuyển đến example.com/wp-admin thay vì truy cập example.com:8080/wp-admin/ và nếu bạn đang sử dụng DNS trên CloudFlare thì nó sẽ nói trang web bị sập

Tôi đang sử dụng Ubuntu, Nginx và Varnish và hiện tại nó hoạt động hoàn hảo thay vì vô hiệu hóa port_in_redirect.

Để thêm, hãy chắc chắn khởi động lại nginx sau:

sudo service nginx restart

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.