2014-06-18 19 views
16

Trên máy khách, tôi có thể sử dụng window.location.hostname để lấy tên máy chủ. Làm thế nào tôi có thể nhận được như vậy trên máy chủ? Tôi cần điều này để làm việc phía sau proxy Apache, rất tiếc, Meteor.absoluteUrl() cho tôi localhost:3000. Tôi cũng muốn nó hoạt động cho các miền khác nhau, tôi muốn một ứng dụng Meteor cung cấp các kết quả khác nhau cho các miền khác nhau.Meteor: Cách lấy tên máy chủ, phía máy chủ

Câu hỏi này có phần liên quan: Get hostname of current request in node.js Express

Trả lời

29

Meteor.absoluteUrl() cho rằng ROOT_URL biến env của bạn được thiết lập một cách chính xác.

Xem các tài liệu sau: http://docs.meteor.com/#meteor_absoluteurl.

Meteor không biết địa chỉ bên ngoài của proxy mà nó đang ngồi phía sau và miền (ảo) mà proxy này được truy cập bởi sẽ phải được chuyển tiếp tới ứng dụng Meteor để làm điều bạn đang làm yêu cầu. Tôi không nghĩ rằng điều này hiện đang được hỗ trợ.

+0

Điều này không giải quyết được vấn đề của mình về 'Meteor.absoluteURL' không hoạt động. Nếu 'ROOT_URL' không được đặt chính xác, vui lòng giải thích cách đặt chính xác. –

+1

Đây là giải pháp tốt hơn vì nó sẽ cung cấp cho bạn tên miền của bạn từ 'ROOT_URL'. Tên máy chủ từ câu trả lời khác sẽ là tên máy chủ 'dạng ngắn', ví dụ: trên mac 'Meteors-macbook' hoặc trên AWS một cái gì đó như 'ip-10-100-12-123' có thể được đặt bởi máy chủ. Máy chủ không thể biết tên máy chủ bên ngoài của chính nó trừ khi nó thực hiện tra cứu ip ngược lại và trong trường hợp này, ai đó có thể dễ dàng xâm nhập nó vào một tên máy chủ khác. Câu trả lời này là an toàn nhất và được đảm bảo nhất để cung cấp cho bạn tên máy chủ chính xác. – Akshat

+0

@NathanielFord ngoài trong sản xuất môi trường thiên thạch sẽ không bắt đầu trừ 'ROOT_URL' được cung cấp. – Akshat

6

Nếu bạn muốn tên máy của máy chủ, như cấu hình trong /etc/hostname ví dụ:

Với meteorite:

$ mrt add npm

Trong máy chủ của bạn mã:

os = Npm.require('os') 
hostname = os.hostname() 

Điều này không có kết nối với tiêu đề Máy chủ được cung cấp trong yêu cầu đến.

cập nhật câu trả lời với một số lời chmac từ bình luận dưới đây

+0

Đây là câu trả lời đúng :) –

+0

tôi nghi ngờ nó sẽ trả về tên máy tương tự như trong trình duyệt ... –

+0

Tại sao? Bạn có thể đưa ra một ví dụ, và lý tưởng là một câu trả lời tốt hơn? :) – guaka

9

Theo this bây giờ bạn có thể nhận được Host tiêu đề bên trong Meteor.publish()Meteor.methods() cuộc gọi bằng cách truy cập:

this.connection.httpHeaders.host 

Ở những nơi khác trong ứng dụng, nó có thể là khó khăn để xác định Host tiêu đề đang được sử dụng để kết nối.

+1

'proxy_set_header chủ $ host; 'trong nginx sẽ thiết lập các tiêu đề' host'. Các nhà cung cấp dịch vụ lưu trữ khác có thể đặt khác nhau. –

1

Trong bất kỳ tập tin sao băng server-side bạn có thể thêm:

if (Meteor.isServer) { 

    Meteor.onConnection(function(result){ 
    var hostname = result.httpHeaders.referer; //This returns http://foo.example.com 
    }); 
} 
Các vấn đề liên quan