2010-02-23 43 views
15

Tôi chỉ phát hiện ra rằng tôi có thể viết một thực sự simple web server bằng cách sử dụng Python. Tôi đã có một máy chủ web Apache Tôi muốn thử máy chủ web dựa trên Python trên máy này. Nhưng tôi sợ rằng tôi có thể bị xung đột nếu tôi thử. Tôi có nghĩa là làm thế nào hai máy chủ web sẽ "quyết định" những người cần để máy chủ một yêu cầu từ một khách hàng?Tôi có thể chạy hai máy chủ web trên cùng một máy tính không?

+0

FWIW, Python có một mô-đun máy chủ web tích hợp (SimpleHTTPServer). Cổng mặc định của nó là 8000. Bạn có thể chạy nó trong dòng lệnh bằng lệnh: python -m SimpleHTTPServer – ianalis

Trả lời

26

Làm cho chúng nghe các cổng khác nhau và bạn sẽ ổn.

Cổng web mặc định là 80. Khi bạn mở một số url trong trình duyệt mà không chỉ định cổng, 80 được sử dụng theo mặc định.

Bạn có thể cấu hình máy chủ web của bạn để lắng nghe một cổng khác nhau nhưng sau đó bạn cũng cần phải xác định nó một cách rõ ràng trong url:

http://localhost:8080 

Khi chọn một chú ý cổng thanh toán rằng số cổng đặc biệt này không phải là chưa được sử dụng bởi bất kỳ phần mềm nào bạn đã cài đặt và chạy trên hộp của bạn. Nếu không, như bạn đã đoán chính xác, sẽ có xung đột.

P.S. Chỉ cần một vài ngày trước khi cài đặt lại tôi đã nhận IIS không thể bắt đầu (dường như không có lý do). Hóa ra phiên bản mới của Skype chiếm cổng mặc định này! Đã phải loại bỏ cài đặt của nó "Sử dụng cổng 80 và 443 làm lựa chọn thay thế cho các kết nối đến".

+0

OK. Có một cổng mặc định được trình duyệt web sử dụng không? Tôi có thể chỉ định cổng khi tôi cố mở một trang web trên một máy chủ web cụ thể không? – Roman

+0

Cổng HTTP mặc định là 80. Bạn có thể chỉ định các cổng trong URL như sau: 'http: // yourserver: portnumber'. –

+0

Giá trị mặc định là 80 cho HTTP 443 cho HTTPS. Bạn có thể chỉ định một số khác bằng cách sử dụng: – Ofir

1

Bạn không thể mở hai máy chủ web trong cùng một cổng (mặc định là 80), nếu bạn muốn tạo hai hoặc nhiều máy chủ web, bạn phải sử dụng các cổng khác nhau.

Nếu bạn đang sử dụng DNS, bạn có thể dễ dàng thiết lập máy chủ web để phản hồi với các trang web khác nhau theo các yêu cầu khác nhau, có thể hữu ích nếu bạn cần phải có các trang web khác nhau cho tên miền phụ hoặc miền khác.

+1

HTTP/1.1 để giành chiến thắng –

+0

thực sự, hãy gửi HOST-HEADER! – Dal

7

Máy chủ web được gắn với một cổng cụ thể. Thông thường, đây là cổng 80. Nếu cổng không được chỉ định rõ ràng, đây là cổng mà trình duyệt sẽ cố gắng nhấn.

Bạn có thể nhận máy chủ thay thế để chạy trên một cổng khác (8080 hoặc 8081 dường như là các phiên bản phổ biến cho máy chủ web, nhưng lựa chọn là của bạn).

Điều này sẽ ngăn chặn xung đột xảy ra. Mọi thứ sẽ chuyển sang cổng 80 sẽ truy cập vào máy chủ cũ của bạn. Tất cả mọi thứ sẽ đến 8080 (hoặc bất cứ cổng nào bạn quyết định để chạy máy chủ của bạn trên) sẽ nhấn máy chủ python đơn giản của bạn.

Để trúng máy chủ khác của bạn, sử dụng một URL như: -

http://localhost:8080/

1

Các máy chủ web sẽ không có tiếng nói trong người các dịch vụ một yêu cầu kết nối (nhiệm vụ này vẫn còn ở mức hệ điều hành). Hơn nữa, không có các tùy chọn socket đặc biệt, socket phải được kết hợp với một sự kết hợp độc đáo giữa giao diện, địa chỉ internet và cổng.

0

Tôi khuyên bạn nên dành một máy chủ để phân phát các yêu cầu https (cổng 443).

Bằng cách đó bạn có thể tránh xung đột cổng mà người khác đã đề cập trong khi cũng không yêu cầu người dùng nhập bất kỳ điều gì lạ vào trình duyệt của họ (số cổng tùy ý). Bạn thậm chí có thể có mỗi máy chủ chuyển hướng lưu lượng tới máy chủ khác (ví dụ máy chủ http nhận yêu cầu http cho tên máy chủ lưu trữ mà máy chủ https xử lý để nó có thể chuyển hướng yêu cầu đến https với cùng tên máy chủ, từ đó chuyển yêu cầu đến máy chủ phù hợp).

máy chủ A:

http://localhost 

Server B:

https://localhost 
8

Nếu bạn thực sự muốn chạy các máy chủ riêng biệt để kiểm tra phần mềm máy chủ thấy câu trả lời khác, nhưng ...

Có vẻ như (vì bạn là nhà phát triển, không phải là quyền sysadmin?) Bạn thực sự chỉ muốn chạy các trang Python và PHP trên cùng một máy tính. Vì vậy, tha thứ cho tôi nếu tôi đang đọc câu hỏi của bạn, nhưng thiết lập này cho phép tôi chạy cả hai loại trang web trên cùng một máy tính với cùng một cổng (cổng 80) trong một máy chủ, Apache.

tôi làm cho gương mặt mới trong tôi/etc/tập tin host (hoặc C: \ Windows \ System32 \ drivers \ etc \ hosts trên Windows) và chỉ cho họ để 127.0.0.1:

127.0.0.1  localhost 

# development projects 
127.0.0.1  somephpsite.com.local 
127.0.0.1  www.somephpsite.com.local 
127.0.0.1  otherpythonsite.com.local 
127.0.0.1  www.otherpythonsite.com.local 

Sau đó, trong Apache tôi thêm VirtualHosts cho mỗi trang web:

<VirtualHost *:80> 
    DocumentRoot "/Library/WebServer/Documents" 
    ServerName localhost 
</VirtualHost> 

<VirtualHost *:80> 
    <Directory "/Users/Robert/Projects/SomeSite/somephpsite.com"> 
     Options Indexes FollowSymLinks MultiViews 
     AllowOverride All 
     Order allow,deny 
     Allow from all 
    </Directory> 
    DocumentRoot "/Users/Robert/Projects/SomeSite/somephpsite.com" 
    ServerName somephpsite.com.local 
    ServerAlias www.somephpsite.com.local 
    ErrorLog "/Users/Robert/Projects/SomeSite/error.log" 
    CustomLog "/Users/Robert/Projects/SomeSite/access.log" common 
</VirtualHost> 

<VirtualHost *:80> 
    <Directory "/Users/Robert/Projects/OtherSite/otherpythonsite.com"> 
     Order allow,deny 
     Allow from all 
    </Directory> 
    DocumentRoot "/Users/Robert/Projects/OtherSite/otherpythonsite.com/static" 
    Alias /(.*(\.css|\.gif|\.ico|\.jpg|\.js|\.pdf|\.txt)) /Users/Robert/Projects/OtherSite/otherpythonsite.com/static/$1 
    WSGIScriptAlias//Users/Robert/Projects/OtherSite/otherpythonsite.com/wsgi.py 
    ServerName otherpythonsite.com.local 
    ServerAlias www.otherpythonsite.com.local 
    ErrorLog "/Users/Robert/Projects/OtherSite/error.log" 
    CustomLog "/Users/Robert/Projects/OtherSite/access.log" common 
</VirtualHost> 

vì vậy, các trang web PHP chạy trong DocumentRoot như họ luôn luôn làm. Và các trang Python chạy trong WSGI. Và cả hai đều chạy trong Apache. Sau đó, để kiểm tra, tôi chỉ thêm ".local" vào bất kỳ trình duyệt nào tôi đang sử dụng để làm việc trên bản sao cục bộ của mình.

+2

+1, không trả lời câu hỏi nhưng hữu ích và có liên quan. – AlexMA

+3

Chỉ cần những gì tôi cần! Tại sao bất cứ ai muốn làm cho người dùng gõ vào một số cổng? –

+0

Chỉ trong trường hợp ai đó cần hai máy chủ web khác nhau. Ví dụ: một ứng dụng node.js và một ứng dụng php, cả hai đều công khai. Nếu hai trên cùng một máy chủ, một trong số này phải lắng nghe cổng khác nhau. – Akis

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