2014-09-01 55 views
6

Tôi đang cố gắng thiết lập một số VH trong Apache 2.4.6 trên CentOS 7 nhưng không thành công vì nó không hoạt động. Đây là những gì tôi đã cố gắng đến bây giờ:VirtualHost không hoạt động theo Apache 2.4.6 trên CentOS 7

  • Vì trong /etc/httpd/conf/httpd.conf là dòng này Include conf.modules.d/*.conf sau đó tôi có thể tạo một tập tin dưới /etc/httpd/conf.d/vhost.conf và đặt này bên trong nó:

    NameVirtualHost *:80 
    
    <VirtualHost *:80> 
        ServerName webserver 
        ServerAlias localhost devserver development 
        DocumentRoot /var/www/html 
    </VirtualHost> 
    
  • dịch vụ

    Nạp/Restart Apache (đã thử cả hai):

    service httpd reload|restart 
    
  • Ở bên Windows chỉnh sửa tệp C:\Windows\system32\drivers\etc\hosts và thêm dòng này:

    192.168.3.131 webserver localhost devserver development # this is the IP of Apache Server 
    
  • Mở trình duyệt và thử: http://webserver, http://devserver và cả hai đi để mặc định trang Apache để VH không hoạt động.

  • Đặt một tập tin dưới /var/www/html/index.php với dòng này <?php phpinfo(); ?> chỉ để biết những mô-đun là Apache tải, đây là kết quả:

    core mod_so http_core mod_access_compat mod_actions mod_alias mod_allowmethods mod_auth_basic mod_auth_digest 
    mod_authn_anon mod_authn_core mod_authn_dbd mod_authn_dbm mod_authn_file mod_authn_socache mod_authz_core 
    mod_authz_dbd mod_authz_dbm mod_authz_groupfile mod_authz_host mod_authz_owner mod_authz_user mod_autoindex 
    mod_cache mod_cache_disk mod_data mod_dbd mod_deflate mod_dir mod_dumpio mod_echo mod_env mod_expires mod_ext_filter 
    mod_filter mod_headers mod_include mod_info mod_log_config mod_logio mod_mime_magic mod_mime mod_negotiation 
    mod_remoteip mod_reqtimeout mod_rewrite mod_setenvif mod_slotmem_plain mod_slotmem_shm mod_socache_dbm 
    mod_socache_memcache mod_socache_shmcb mod_status mod_substitute mod_suexec mod_unique_id mod_unixd mod_userdir 
    mod_version mod_vhost_alias mod_dav mod_dav_fs mod_dav_lock mod_lua prefork mod_proxy mod_lbmethod_bybusyness 
    mod_lbmethod_byrequests mod_lbmethod_bytraffic mod_lbmethod_heartbeat mod_proxy_ajp mod_proxy_balancer mod_proxy_connect 
    mod_proxy_express mod_proxy_fcgi mod_proxy_fdpass mod_proxy_ftp mod_proxy_http mod_proxy_scgi mod_systemd mod_cgi mod_php5 
    

Và rõ ràng mod_vhost được nạp nhưng không hoạt động, đã làm tôi bỏ lỡ một cái gì đó? Bất kỳ trợ giúp hoặc lời khuyên nào về điều này? Có lẽ tôi đã quên một cái gì đó nhưng tôi đọc tài liệu Apache và không tìm thấy một cái gì đó hữu ích

Cập nhật: test1

tôi đã thực hiện một số thay đổi VH nghĩa và bây giờ điều này là những gì tôi có:

<VirtualHost *:80> 
    DocumentRoot /var/www/html 
    ServerName webserver 
    #ServerAlias localhost devserver development 

    <Directory "/var/www/html"> 
     Options FollowSymLinks Includes ExecCGI 
     AllowOverride All 
     Allow from all 

     #Require local 
     #Require 192.168.3.0/16 
     #Require 192.168.1.0/16 
    </Directory> 
</VirtualHost> 

Nhưng tôi nhận được một 403 Forbidden

Forbidden

Bạn không được phép truy cập /index.php trên máy chủ này.

Lỗi gì ở đây?

Trả lời

2

Một vài điều mà có thể gây ra vấn đề bạn: -

NameVirtualHost *:80 

là không còn là một cú pháp hợp lệ cho Apache 2.4.x bạn nên loại bỏ nó hoàn toàn.

Về phía Windows một khi bạn đã thay đổi file HOSTS, bạn cần phải tải lại DNS Client service, do đó, hoặc khởi động lại hay vẫn tốt hơn, mở một cửa sổ lệnh sử dụng "Run as Administrator" và làm như sau: -

net stop dnscache 
net start dnscache 

Cuối cùng, trong định nghĩa máy ảo của bạn, nó sẽ giúp nói với apache từ nơi nó được phép chấp nhận các kết nối đến máy chủ ảo này như sau: -

<VirtualHost *:80> 
    ServerName webserver 
    ServerAlias localhost devserver development 
    DocumentRoot /var/www/html 
    <Directory "/var/www/html"> 
     AllowOverride All 

     Require local 
     Require ip 192.168.3 

    </Directory> 
</VirtualHost> 

này sẽ cho phép truy cập từ các máy chạy apache.210 và từ bất kỳ địa chỉ IP trên mạng nội bộ Require ip 192.168.3

Ngoài ra tôi không chắc chắn nơi Apache trên unix đặt gốc tài liệu mặc định của nó nhưng nó có thể là một ý tưởng để phân biệt 3 tên miền của bạn đến thư mục khác nhau như vậy

<VirtualHost *:80> 
    ServerName localhost 
    ServerAlias localhost 
    DocumentRoot /var/www/html 
    <Directory "/var/www/html"> 
     AllowOverride All 

     Require local 
     Require ip 192.168.3 

    </Directory> 
</VirtualHost> 


<VirtualHost *:80> 
    ServerName webserver 
    ServerAlias webserver 
    DocumentRoot /var/www/html/webserver 
    <Directory "/var/www/html/webserver"> 
     AllowOverride All 

     Require local 
     Require ip 192.168.3 

    </Directory> 
</VirtualHost> 

<VirtualHost *:80> 
    ServerName development 
    ServerAlias development 
    DocumentRoot /var/www/html/development 
    <Directory "/var/www/html/development"> 
     AllowOverride All 

     Require local 
     Require ip 192.168.3 

    </Directory> 
</VirtualHost> 


<VirtualHost *:80> 
    ServerName devserver 
    ServerAlias devserver 
    DocumentRoot /var/www/html/devserver 
    <Directory "/var/www/html/devserver"> 
     AllowOverride All 

     Require local 
     Require ip 192.168.3 

    </Directory> 
</VirtualHost> 

Sau đó, đặt một tệp html đơn giản trong mỗi thư mục có nội dung 'Xin chào từ Servername' và thay đổi tên máy chủ trong mỗi tệp để bạn biết mình đã đến đúng máy chủ.

RE: Cập nhật test1.php

Allow from all 

là không hợp lệ Apache 2.4 cú pháp hoặc, trừ khi bạn đã tải LoadModule access_compat_module modules/mod_access_compat.so

Thậm chí sau đó nó phải được

Order Allow,Deny 
Allow from all 

Vì vậy, SỬ DỤNG Apache 2.4 cú pháp

Require all granted 

Nếu bạn muốn sử dụng tuyến đường lười và cho phép truy cập từ vũ trụ.

+0

Tôi đã gỡ bỏ chỉ thị ServerAlias ​​và chỉ để lại ServerName chỉ để kiểm tra xem đó có phải là vấn đề hay không. Tôi loại bỏ các chỉ thị NameVirtualHost và đó không phải là vấn đề hoặc.Apache trong CentOS và các bản phân phối dựa trên RHEL khác đã đặt DocumentRoot thành '/ var/www/html' để đúng với cấu hình VH. Cuối cùng sau khi thử nghiệm trong Windows với cả hai lệnh bạn rời tôi đã thử cái này quá 'ipconfig/flushdns' nhưng truy cập' webserver' đưa tôi đến mặc định "Chào mừng" – ReynierPM

+0

Có nhưng quan điểm của tôi là bạn đã chỉ tất cả 3 tên miền vào '/ var/www/html' để chúng NÊN tất cả đi đến cùng một Máy chủ ảo, cùng một vị trí với vị trí lưu trữ cục bộ mặc định của bạn. Vì vậy, làm thế nào để bạn biết nếu định nghĩa máy chủ ảo đang làm việc? Vì vậy, nếu bạn tạo 3 VHOST khác nhau, tất cả chỉ vào một thư mục diffeent bạn sẽ biết cái nào thực sự hoạt động và cái nào thì không. – RiggsFolly

+0

Vâng logic của tôi nói nếu cả ba tên miền trỏ đến cùng một địa chỉ và địa chỉ đó có tệp 'index.php' nếu tôi gọi máy chủ web hoặc localhost hoặc máy chủ devserver thì nên hiển thị trang chỉ mục hay không? Có lẽ tôi sai, ngay bây giờ tôi đang gặp một vấn đề khác và tôi nghĩ đó là vấn đề, đây là thông điệp tôi nhận được 'Unknown Authz provider: 192.168.3' – ReynierPM

3

Hãy cẩn thận với SELinux. Cấu hình mặc định sẽ ngăn các thư mục ảo của bạn bị truy cập bởi httpd. Bạn sẽ cần đặt bối cảnh thích hợp:

# chcon -R -u system_u -r object_r -t httpd_sys_content_t <DocumentRoot> 

Một tùy chọn khác chỉ là tắt SELinux.

4

Để xây dựng trên jap1968 'post s, CentOS 7 đi kèm với SELinux' đau s ở mức mông thiết lập để enforcing. Điều này gây ra tất cả các loại nhầm lẫn khi cấu hình dịch vụ hoàn toàn bình thường không thành công (Apache).

Để vô hiệu hóa SELinux bạn sẽ cần phải:

0) [tùy chọn] Crack mở một shell trở thành root bằng ... hoặc thưởng thức mới, siêu vui vẻ sáng bóng, cấu hình sudo để cho phép bạn thực hiện dự án "root stuffs". Có lẽ.

su -l 

1) Nhận trạng thái hiện tại là SELinux. Chạy sestatus:

sestatus 

2) Nếu SELinux đang gây ra rụng tóc và sớm lão hóa bạn sẽ nhận được một cái gì đó như thế này:

SELinux status:     enabled 
SELinuxfs mount:    /sys/fs/selinux 
SELinux root directory:   /etc/selinux 
Loaded policy name:    targeted 
Current mode:     enforcing 
Mode from config file:   enforcing 
Policy MLS status:    enabled 
Policy deny_unknown status:  allowed 
Max kernel policy version:  28 

3) Chỉnh sửa các tập tin /etc/selinux/config. Thay đổi SELINUX=enforcing thành SELINUX=permissive. Làm như vậy sẽ giúp bạn có niềm vui bất tận vào lần tiếp theo bạn khởi động lại. Bạn sẽ kết thúc với một cái gì đó như thế này:

# This file controls the state of SELinux on the system. 
# SELINUX= can take one of these three values: 
#  enforcing - SELinux security policy is enforced. 
#  permissive - SELinux prints warnings instead of enforcing. 
#  disabled - No SELinux policy is loaded. 
# SELINUX=enforcing 
# ===> VOODOO HERE <=== 
SELINUX=permissive 
# ===> END VOODOO <=== 
# 
# SELINUXTYPE= can take one of three two values: 
#  targeted - Targeted processes are protected, 
#  minimum - Modification of targeted policy. Only selected processes are protected. 
#  mls - Multi Level Security protection. 
SELINUXTYPE=targeted 

4) Vô hiệu hoá SELinux. Bạn có thể khởi động lại vào thời điểm này nhưng bạn có thể dễ dàng thông báo cho SELinux để dành thời gian cho việc làm bạn đau khổ. Chạy setenforce để thiết lập lại mức độ thực thi SELinux để phù hợp với /etc/selinux/config file:

setenforce 0 

5) Kiểm tra sestatus một lần nữa:

sestatus 

Nếu tất cả mọi thứ đã đi như mong đợi sestatus sẽ trở lại một cái gì đó như thế này:

SELinux status:     enabled 
SELinuxfs mount:    /sys/fs/selinux 
SELinux root directory:   /etc/selinux 
Loaded policy name:    targeted 
Current mode:     permissive 
Mode from config file:   permissive 
Policy MLS status:    enabled 
Policy deny_unknown status:  allowed 
Max kernel policy version:  28 

6) Khởi động lại Apache. Nếu tên miền của vhost của bạn được giải quyết đến máy chủ bạn đang làm việc trên bạn sẽ thấy bóng máy chủ ảo mới của bạn:

# Restart apache: 
systemctl restart httpd.service 

# Be lazy by checking your virtual host from the command line: 
curl www.example.com/new-file-that-only-exists-in-your-new-vhost.txt 

6,5) Dừng đọc ở đây. Hay là không. Tôi là một bài viết trên bảng tin, không phải mẹ của bạn.

Tất cả mọi thứ dưới đây nằm ngoài phạm vi của câu hỏi ban đầu và chỉ bao gồm vì bạn thực sự cần được chạy với SELinux kích hoạt.

7) Làm việc để bật lại selinux. Bắt đầu bằng cách xem các bản ghi selinux để xem một số súp bảng chữ cái tuyệt vời:

tail -f /var/log/audit/audit.log 

8) Hãy ngạc nhiên trước độ sâu của tính năng, số điên rồ của tiện ích kém tên, và lộn xộn UX xấu xí đó được hiểu là SELinux. Có lẽ bạn nên đưa vào quần cậu bé lớn của bạn và uống một nồi toàn bộ cà phê trước khi bạn nhảy trong Dưới đây là một số thông tin:.

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