2013-05-21 34 views
10

EDIT: Hóa ra thiết lập của tôi bên dưới thực sự hoạt động. Trước đây, tôi đã nhận được chuyển hướng đến cổng 36000 nhưng đó là do một số cài đặt cấu hình trên ứng dụng phụ trợ của tôi đã gây ra nó.proxy ngược nginx để chương trình phụ trợ chạy trên localhost

Tôi không hoàn toàn chắc chắn, nhưng tôi tin rằng tôi có thể muốn thiết lập proxy ngược sử dụng nginx.

Tôi có một ứng dụng đang chạy trên máy chủ tại cổng 36000. Theo mặc định, cổng 36000 không thể truy cập công khai và ý định của tôi là nginx lắng nghe url công khai, trực tiếp mọi yêu cầu tới url tới ứng dụng đang chạy trên cổng 36000. trong toàn bộ quá trình này, người dùng không nên biết rằng/yêu cầu của họ đang được gửi đến một ứng dụng chạy trên cổng máy chủ của tôi 36000.

để đặt nó trong điều kiện cụ thể hơn, giả sử rằng url của tôi là http://domain.somehost.com/

Khi truy cập http://domain.somehost.com/, nginx sẽ nhận yêu cầu và chuyển hướng nó đến ứng dụng đã chạy trên máy chủ trên cổng 36000, ứng dụng n thực hiện một số xử lý và chuyển trả lời lại. Cổng 36000 không thể truy cập công khai và không được xuất hiện như một phần của bất kỳ url nào.

Tôi đã thử một thiết lập mà trông giống như:

server { 
    listen 80; 
    server_name domain.somehost.com 
    location/{ 
     proxy_pass http://127.0.0.1:36000; 
     proxy_set_header Host $host; 
     proxy_set_header X-Real-IP $remote_addr; 
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    } 
} 

và kể cả bên trong nginx.conf chính của tôi

Tuy nhiên, nó đòi hỏi tôi để làm cổng 36000 truy cập công khai, và tôi cố gắng tránh điều đó. Cổng 36000 cũng hiển thị như một phần của url được chuyển tiếp trong trình duyệt web.

Có cách nào để tôi có thể thực hiện tương tự nhưng không truy cập cổng 36000?

Cảm ơn bạn.

Trả lời

13

EDIT: Cấu hình bên dưới là từ cấu hình nginx đang hoạt động, với tên máy chủ và cổng đã thay đổi.

Bạn cần có thể đặt máy chủ nghe trên cổng 36000 là máy chủ upstream (xem http://nginx.org/en/docs/http/ngx_http_upstream_module.html).

server { 
     listen 80; 
     server_name domain.somehost.com; 

     location/{ 
       proxy_set_header X-Real-IP $remote_addr; 
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
       proxy_set_header Host $host; 
       proxy_set_header X-NginX-Proxy true; 
       proxy_pass http://localhost:36000/; 
       proxy_redirect http://localhost:36000/ https://$server_name/; 
     } 
} 
+0

nó không hoạt động. nhưng có một số lỗi trong cấu hình của bạn ở trên. Tôi đã phải chuyển khối thượng nguồn ra khỏi khối máy chủ và xóa tiền tố 'http: //' cho phần '127.0.0.1:36000'. Có một khối máy chủ bên trong và tôi cũng phải loại bỏ phần 'server {' và '}'. Nhưng yea nó không làm việc ra ... bất kỳ ý tưởng tại sao? – yanhan

+0

Ahh, xin lỗi tôi đã đánh máy. khối máy chủ thứ hai không tồn tại. chỉnh sửa ngay bây giờ. – Intermernet

+1

Ngoài ra, hãy thử sử dụng câu lệnh 'proxy_redirect'. 'proxy_redirect http: // localhost: 36000/http: // $ server_name /' – Intermernet

Các vấn đề liên quan