Apache chuyển hướng đến một cổng khác


151

Tôi đã vật lộn với điều này một thời gian và chắc chắn đang làm gì đó sai.

Tôi có máy chủ apache và máy chủ JBoss trên cùng một máy. Tôi muốn chuyển hướng lưu lượng truy cập cho mydomain.com sang JBoss localhost: 8080 / ví dụ. DNS hiện đang được thiết lập cho mydomain.com và nó sẽ chuyển thẳng đến cổng 80 khi được nhập vào trình duyệt.

Câu hỏi của tôi là làm thế nào để tôi chuyển hướng đến một cổng khác khi một tên miền nhất định đến apache (trong trường hợp này là "mydomain.com")?

<VirtualHost ip.addr.is.here> 
  ProxyPreserveHost On
  ProxyRequests Off
  ServerName mydomain.com
  ProxyPass http://mydomain.com http://localhost:8080/example
  ProxyPassReverse http://mydomain.com http://localhost:8080/example
</VirtualHost> 

CẬP NHẬT w / Gợi ý - Vẫn không chuyển tiếp đến cổng 8080

<VirtualHost *:80> 
  ProxyPreserveHost On
  ProxyRequests Off
  ServerName mydomain.com
  ServerAlias www.mydomain.com
  ProxyPass http://mydomain.com http://localhost:8080/example
  ProxyPassReverse http://mydomain.com http://localhost:8080/example
</VirtualHost> 

Điều đó có vẻ khá tốt. Triệu chứng của bạn là gì?
Martin Vilcans

Sympotms là tôi đặt www.mydomain.com trong trình duyệt nhưng nó đi đến thư mục gốc apache. Thay vào đó, tôi muốn nó chuyển hướng đến thư mục con jboss localhost: 8080 / thư mục con. Tôi hiện đang làm việc để chuyển hướng các tên miền khác nhau sang cổng 80, nhưng không thể chuyển nó sang cổng khác.
đặc vụ

Tôi có cùng một yêu cầu: bạn đã tìm ra giải pháp chưa?
Cystack

1
@Cystack - Tôi không thể làm cho nó hoạt động được. Tôi đã thử rất nhiều biến thể cho cấu hình nó làm tôi phát điên. Tôi đã từ bỏ nó = / Nếu bạn tình cờ tìm thấy một giải pháp xin vui lòng gửi nó ở đây, tôi muốn biết làm thế nào để làm cho nó hoạt động. chúc may mắn bạn tôi ơi!
đặc vụ

Điều này làm việc cho tôi: serverfault.com/a/195831/111707
jjrv

Câu trả lời:


224

Bạn nên bỏ tên miền http://example.comtrong ProxyPass và ProxyPassReverse và để nguyên tên miền /. Ngoài ra, bạn cần để lại /phần cuối của example/nơi nó đang chuyển hướng. Ngoài ra, tôi đã gặp một số rắc rối với http://example.comso với http://www.example.com- chỉ www hoạt động cho đến khi tôi tạo ServerName www.example.com và ServerAlias ​​example.com. Cho đi sau đây.

<VirtualHost *:80> 
  ProxyPreserveHost On
  ProxyRequests Off
  ServerName www.example.com
  ServerAlias example.com
  ProxyPass / http://localhost:8080/example/
  ProxyPassReverse / http://localhost:8080/example/
</VirtualHost> 

Sau khi bạn thực hiện những thay đổi này, hãy thêm các mô-đun cần thiết và khởi động lại apache

sudo a2enmod proxy && sudo a2enmod proxy_http && sudo service apache2 restart

9
bật các mô-đun apache trước khi khởi động lại apache - digitalocean.com/community/tutorials/ mài
Pradyut Bhattacharya

1
Điều này có giống với máy chủ CentOS không? (Tôi không thấy lý do tại sao không, chỉ cần đảm bảo). Và, tập tin cấu hình này sẽ là gì? (ở đâu đó trong / etc / httpd / conf Tôi đoán ...)
Jeremy

1
Nó hoạt động, nhưng tôi thấy rằng trong trang chào mừng của ứng dụng của tôi, css không được tải (trước đó đã hoạt động trên example.com:8080/example). và cũng có một số ngoại lệ. bất cứ ý tưởng những gì tôi đang thiếu?
Rajarshee Mitra 4/11/2015

1
điều này gây ra lỗi "Dịch vụ không khả dụng" trên httpd của tôi cho đến khi tôi thực hiện/usr/sbin/setsebool -P httpd_can_network_connect 1
vladkras

@vladkras Cảm ơn rất nhiều về mẹo đó, rất hữu ích!
từ

28

Tôi đã giải quyết vấn đề này với đoạn mã sau:

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
<VirtualHost *:80>
ProxyPreserveHost On
ProxyRequests Off
ServerName myhost.com
ServerAlias ww.myhost.com
ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/
</VirtualHost>

Tôi cũng đã sử dụng:

a2enmod proxy_http

10

Tôi muốn làm chính xác điều này để tôi có thể truy cập Jenkins từ tên miền gốc.

Tôi thấy tôi phải vô hiệu hóa trang web mặc định để làm việc này. Đây chính xác là những gì tôi đã làm.

$ sudo vi /etc/apache2/sites-available/jenkins

Và chèn nó vào tập tin:

<VirtualHost *:80>
  ProxyPreserveHost On
  ProxyRequests Off
  ServerName mydomain.com
  ServerAlias mydomain
  ProxyPass / http://localhost:8080/
  ProxyPassReverse / http://localhost:8080/
  <Proxy *>
        Order deny,allow
        Allow from all
  </Proxy>
</VirtualHost>

Tiếp theo, bạn cần bật / tắt các trang web thích hợp:

$ sudo a2ensite jenkins
$ sudo a2dissite default
$ sudo service apache2 reload

Hy vọng nó sẽ giúp được ai đó.


Cảm ơn bạn đã đóng góp @Louth. Tôi từ lâu đã đưa ra điều này và không còn máy chủ. Vẫn làm phiền tôi rằng tôi không bao giờ làm cho nó hoạt động, tôi có thể khởi động một máy chủ mới chỉ để thử nghiệm lại. Cảm ơn một lần nữa, tôi chắc chắn sẽ cập nhật nếu / khi tôi thử lại lần nữa.
đặc vụ

Wiki Jenkins giải thích cách chạy Jenkins đằng sau Apache: wiki.jenkins-ci.org/display/JENKINS/ mẹo
mneute

6

Tìm thấy điều này bằng thử nghiệm và lỗi. Nếu cấu hình của bạn chỉ định Tên máy chủ, thì lệnh Virtualhost của bạn sẽ cần thực hiện tương tự. Trong ví dụ sau, awesome.example.com và awesome.example.com sẽ được chuyển tiếp đến một số dịch vụ địa phương chạy trên cổng 4567.

ServerName example.com:80

<VirtualHost example.com:80>
  ProxyPreserveHost On
  ProxyRequests Off
  ServerName awesome.example.com
  ServerAlias amazing.example.com
  ProxyPass / http://localhost:4567/
  ProxyPassReverse / http://localhost:4567/
</VirtualHost>

Tôi biết điều này không trả lời chính xác câu hỏi, nhưng tôi đặt nó ở đây vì đây là kết quả tìm kiếm hàng đầu cho chuyển tiếp cổng Apache. Vì vậy, tôi nghĩ rằng nó sẽ giúp ai đó một ngày nào đó.


Đây là người duy nhất làm việc cho tôi. Sử dụng *:80thay vì example.com:80có nghĩa là cổng sẽ không được chuyển hướng.
Seb123

4

Bạn phải chắc chắn rằng proxy được kích hoạt trên máy chủ. Bạn có thể làm như vậy bằng cách sử dụng các lệnh sau:

  a2enmod proxy
  a2enmod proxy_http

  service apache2 restart

3

Đây có thể là một câu hỏi cũ, nhưng đây là những gì tôi đã làm:

Trong tệp .conf được tải bởi apache:

<VirtualHost *:80>
  ServerName something.com
  ProxyPass / http://localhost:8080/
</VirtualHost>

Giải thích: Lắng nghe tất cả các yêu cầu tới cổng 80 của máy cục bộ. Nếu tôi yêu cầu " http://something.com/somethingorother", hãy chuyển tiếp yêu cầu đó đến " http://localhost:8080/somethingorother". Điều này sẽ hoạt động cho một khách truy cập bên ngoài bởi vì, theo các tài liệu, nó ánh xạ yêu cầu từ xa đến không gian của máy chủ cục bộ.

Tôi đang chạy Apache 2.4.6-2ubfox2.2, vì vậy tôi không chắc chắn "-2ubfox2.2" ảnh hưởng đến khả năng áp dụng rộng rãi hơn của câu trả lời này như thế nào.

Sau khi bạn thực hiện những thay đổi này, hãy thêm các mô-đun cần thiết và khởi động lại apache

sudo a2enmod proxy && sudo a2enmod proxy_http && sudo service apache2 restart

2

Nếu bạn không phải sử dụng proxy để JBoss và mydomain.com:8080 có thể được "tiếp xúc" với thế giới, thì tôi sẽ làm điều này.

<VirtualHost *:80>
  ServerName mydomain.com
  Redirect 301 / http://mydomain.com:8080/
</VirtualHost>

Sử dụng một cổng khác ngoài 80 không chỉ trông xấu, mà còn có thể gây ra sự cố với máy chủ proxy hoặc ISP. Trong trường hợp đó, chỉ cần loại bỏ Apache và chạy JBoss trên cổng 80 thay thế!
Martin Vilcans

Chạy mọi thứ trong JBoss là một lựa chọn, tôi chỉ cố gắng tránh chuyển các trang apache sang JBoss, nhưng nó không nên quá tốn thời gian. Cảm ơn vì bạn đã phản hồi.
đặc vụ


1

Apache của tôi lắng nghe 2 cổng khác nhau,

Listen 8080
Listen 80  

Tôi sử dụng 80 khi tôi muốn một URL trong suốt và không đặt cổng sau khi URL hữu ích cho các dịch vụ google không cho phép url cục bộ?

Nhưng tôi sử dụng 8080 để phát triển nội bộ, trong đó tôi sử dụng cổng làm tài liệu tham khảo cho "môi trường dev"


0

Apache hỗ trợ các máy chủ ảo dựa trên tên và IP. Có vẻ như bạn đang sử dụng cả hai, có lẽ không phải là thứ bạn cần.

Tôi nghĩ rằng bạn thực sự đang cố gắng thiết lập lưu trữ ảo dựa trên tên và vì thế bạn không cần chỉ định địa chỉ IP.

Hãy thử <Virtualhost *: 80> để liên kết với tất cả các địa chỉ IP, trừ khi bạn thực sự muốn lưu trữ ảo dựa trên ip . Đây có thể là trường hợp nếu máy chủ có một số địa chỉ IP và bạn muốn phục vụ các trang web khác nhau trên các địa chỉ khác nhau. Thiết lập phổ biến nhất là (tôi đoán) máy chủ ảo dựa trên tên.


Điều đó có ý nghĩa, dựa trên tên là tất cả tôi cần. Tôi đã thay đổi nó nhưng nó vẫn không định tuyến đến cổng khác
agentcurry

0

Bạn cần 2 thứ:

  1. Thêm một ServerAlias www.mydomain.comvào cấu hình của bạn
  2. thay đổi proxypass của bạn thành ProxyPassMatch ^(.*)$ http://localhost:8080/example$1, để có thể giữ cho mod_dir và dấu gạch chéo không bị can thiệp.

Tôi đã thêm ServerAlias ​​nhưng vẫn không gặp may.
agentcurry

0

Tất cả đều là những hiểu biết tuyệt vời để truy cập các cổng thông qua tên miền trên các máy chủ ảo. Đừng quên, tuy nhiên, để kích hoạt máy chủ ảo; điều này có thể được nhận xét:

NameVirtualHost *:80
<Directory "/home/dawba/www/">
 allow from all
</Directory>

Chúng tôi chạy WSGI với máy chủ Apache tại tên miền sxxxx.com và máy chủ golang chạy trên cổng 6800. Một số tường lửa dường như chặn tên miền bằng cổng. Đây là giải pháp của chúng tôi:

<VirtualHost *:80>
 ProxyPreserveHost On
 ProxyRequests Off
 ServerName wsgi.sxxxx.com
 DocumentRoot "/home/dxxxx/www"
  <Directory "/home/dxxx/www">
    Options Indexes FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from all
  </Directory>
 ScriptAlias /py/ "/home/dxxxx/www/py/"
 WSGIScriptAlias /wsgiprog /home/dxxxx/www/wsgiprog/Form/Start.wsgi
</VirtualHost>

<VirtualHost *:80>
 ProxyPreserveHost On
 ProxyRequests Off
 ServerName sxxxx.com 
 ServerAlias www.sxxxx.com
 ProxyPass / http://localhost:6800/
 ProxyPassReverse / http://localhost:6800/
</VirtualHost>

0

Điều này cũng hoạt động trong ISPConfig. Trong danh sách trang web có được bên trong một tên miền, nhấp vào tab Tùy chọn, thêm các dòng sau :;

ProxyPass / http://localhost:8181/
ProxyPassReverse / http://localhost:8181/

Sau đó vào trang web và wolaa :) Đây cũng là giao thức HTTPS hoạt động.


0

Hãy thử cái này-

<VirtualHost *:80> 
  ProxyPreserveHost On
  ProxyRequests Off
  ServerName www.adminbackend.example.com
  ServerAlias adminbackend.example.com
  ProxyPass / http://localhost:6000/
  ProxyPassReverse / http://localhost:6000/
  ErrorLog ${APACHE_LOG_DIR}/error.log
  CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost> 
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.