2013-04-17 39 views
5

Tôi đã tìm câu trả lời và tôi tin rằng câu trả lời là khá đơn giản nhưng tôi không thể tìm thấy nó. Tôi nghĩ rằng tôi thiếu hiểu biết về nginx ...nginx/chai python - yêu cầu tuyến đến một cảng khác

Tôi có phiên bản nginx của mình chạy trên máy chủ cục bộ: 8080 và máy chủ Bottle của tôi đang nghe trên máy chủ cục bộ: 8081. Nếu tôi mở địa chỉ từ trình duyệt, chúng hoạt động tốt nhưng khi tôi cố truy cập từ ứng dụng tôi đang chạy trên localhost: 8080, tôi không thể truy xuất tài nguyên được tạo bởi máy chủ Chai.

Điều tôi cần làm là chuyển hướng tất cả các cuộc gọi đến/data/path đến cùng một miền (localhost) nhưng một cổng (8081) khác, nơi máy chủ chai của tôi đang nghe.

Đây là mã: Nginx:

server { 
    listen  8080; 
    server_name localhost; 
    root /Users/Diego/Desktop; 

    location/{ 
     index index.html index.htm; 
    } 

    location /data/ { 
     proxy_pass http://127.0.0.1:8081; 
    } 
} 

Chai server:

@route('/') 
def printtest(): 
    print 'success' 
    return 'loaded page' 

@route('/<scenename>/data/<filename:path>') 
def testMethod(scenename,filename): 
    print scenename, filename 

run(host='localhost', port=8081, debug=True) 

Calling trong trình duyệt, localhost: 8080, hiển thị cho tôi những trang phục vụ qua nginx, nhưng sau đó, nếu Tôi gọi một liên kết để lấy một cái gì đó được lưu trữ trong /data/directory/filename.json, Chai dường như không nhận được yêu cầu. Nhật ký lỗi nêu rõ:

2013/04/16 18:50:52 [error] 3544#10612: *69 CreateFile() "C:/Users/Diego/Desktop/project1/data/directory/directory-varietal.json" failed (3: The system cannot find the path specified), client: 127.0.0.1, server: localhost, request: "GET /project1/data/directory/directory-varietal.json HTTP/1.1", host: "localhost:8081", referrer: "http://localhost:8080/project1/" 

ai cũng có thể cho tôi biết cách xử lý loại chuyển hướng/định tuyến này?

Ngoài ra, có cách nào để in nguồn cấp dữ liệu trong nhật ký từ nginx không? giống như lệnh print_entry hoặc tương tự?

Cảm ơn!

EDIT: Tôi đã thử điều này nhưng không có kết quả ... https://serverfault.com/questions/208656/routing-to-various-node-js-servers-on-same-machine

EDIT: Ok một số cải tiến, tôi thấy rằng có thể là một vấn đề của địa điểm truy vấn. Với khối này và yêu cầu một tập tin .json nó thực sự truy vấn máy chủ Chai.

location ~* \.(json)$ { 
    proxy_pass http://localhost:8081; 
} 

EDIT: Yeee! Tôi tìm thấy một giải pháp ... hóa ra đó là một vấn đề với đường dẫn được xác định trong vị trí. Lưu ý để tự: đọc KỸ hướng dẫn: http://wiki.nginx.org/HttpCoreModule#location

mã mới cho máy chủ:

server { 
    listen  8080; 
    server_name localhost; 
    root /Users/Diego/Desktop; 

    location/{ 
     index index.html index.htm; 
    } 

    location ~* /data/ { 
     proxy_pass http://localhost:8081; 
    } 
} 

Dù sao nếu ai có một giải pháp tốt hơn hoặc bất cứ đề nghị là nhiều hơn thì hoan nghênh đóng góp.

+0

Vui mừng khi biết bạn đã giải quyết nó - và cảm ơn bạn đã quay lại để đăng giải pháp! –

+0

@Dieghito, vui lòng đăng cập nhật của bạn dưới dạng câu trả lời đúng. Có thể chấp nhận câu trả lời cho câu hỏi của bạn. – Rod

+0

Cảm ơn @Rod, đã xong. – Dieghito

Trả lời

3

EDIT: Yeee! Tôi tìm thấy một giải pháp ... hóa ra đó là một vấn đề với đường dẫn được xác định trong vị trí. Lưu ý để tự: đọc KỸ hướng dẫn: http://wiki.nginx.org/HttpCoreModule#location

mã mới cho máy chủ:

server { 
    listen  8080; 
    server_name localhost; 
    root /Users/Diego/Desktop; 

    location/{ 
    index index.html index.htm; 
    } 

    location ~* /data/ { 
    proxy_pass http://localhost:8081; 
    } 
} 

Dù sao nếu ai có một giải pháp tốt hơn hoặc bất cứ đề nghị là nhiều hơn thì hoan nghênh đóng góp.

+1

Đây là cách hoạt động. Giải pháp của bạn thêm '~ *' vào nginx 'location ~ */data /' block. 'Vị trí/dữ liệu/'ban đầu khớp với chuỗi ký tự bằng chữ cái tại _beginning_ của truy vấn. Việc thêm '~' sử dụng các biểu thức chính quy, và '*' thêm phân biệt chữ hoa chữ thường. Điều này là cần thiết vì '/ data /' sẽ không khớp với phần đầu của 'GET/project1/data/directory/directory-varietal.json', nhưng regex thấy không có vấn đề gì. – here

+0

Có chính xác những gì tôi đã học được từ trải nghiệm này! Trong thực tế, tôi đã phải thêm một số quy tắc và tôi theo nguyên tắc này. Cảm ơn bạn đã bình luận và giải thích! – Dieghito

+0

kiểm tra giá trị nếu bạn cần dấu gạch chéo sau số cổng trong proxy_pass. Điều này hơi bực bội cho chúng tôi trong một thời gian! –

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