Apache 的修改端口,虚拟主机搭建基于网站加密和常见问题解答
作者 浩浩哥来了
首先需要确定apache这个服务存在
/etc/init.d/httpd restart 如果启动起来了说明你已经安装成功
如果启动不起来就需要自己手动安装,因为添加了本地源,所以可以直接安装
Yum install http* -y
/etc/init.d/httpd restart 在一次检测下,服务安装成功与否
Cd /var/www/html 目录下是存放网页的路径
Vim index.html 因为当前手头没有相应的网站,自己手动添加了一个index.html的临时网站
在网站中添加一些信息对网页进行标识。例如 huan ying lai dao haohaoge de wang zhan
/etc/init.d/httpd restart 对于修改了一些配置或者其他的操作,随手重启下服务是对你有好处的
192.168.18.112:80 前面是你的虚拟机中的ip地址后面是apache中默认的80端口
对网站修改端口
Vim /etc/httpd/conf/httpd.conf 这是apache的配置文件
/80 通过是/80找到在apache配置文件中两处需要修改80端口换成你当前需要使用的端口
#ServerName www.example.com:80 将此处的#去掉同时将80换成81,同时必须指明你当前的主机名,跟换成下面格式
ServerName haohaogelaile:81
Listen :80 在此处必须指明你的apache的ip地址同时需要是用冒号将端口分隔开后面是修改的端口
Listen 192.168.18.112:81
/etc/init.d/httpd restart
重启服务会出现一下错误
[root@www conf]# /etc/init.d/httpd restart
停止 httpd: [确定]
正在启动 httpd:(13)Permission denied: make_sock:could not bind to address 192.168.18.112:81
no listening sockets available, shuttingdown
Unable to open logs
[失败]
解决方法
在selinux中添加http的端口
Yum install policycoreutils-python* -y
[root@www conf]# semanage port -l | grephttp 首先筛选出http的所有端口
http_cache_port_t tcp 3128, 8080, 8118, 8123, 10001-10010
http_cache_port_t udp 3130
http_port_t tcp 80, 443, 488, 8008, 8009, 8443
pegasus_http_port_t tcp 5988
pegasus_https_port_t tcp 5989
[root@www conf]# semanage port -a -thttp_port_t -p tcp 81 为http添加81端口(port 端口必须指明 –a 添加的意思 –t是选择类型 –p选择协议以上可以根据筛选出来的结果相应的填写后面是81你所需要添加的端口)
[root@www conf]# semanage port -l | grephttp 在筛选一次看看81端口是否出现,添加过程较慢,需要耐心等待
http_cache_port_t tcp 3128, 8080, 8118, 8123, 10001-10010
http_cache_port_t udp 3130
http_port_t tcp 81, 80, 443, 488, 8008, 8009, 8443
pegasus_http_port_t tcp 5988
pegasus_https_port_t tcp 5989
[root@www conf]# /etc/init.d/httpd restart
停止 httpd: [失败]
正在启动 httpd: [确定]
[root@www conf]# /etc/init.d/httpd restart
停止 httpd: [确定]
正在启动 httpd: [确定]
在用浏览器输入192.168.18.112:81看看网页内容
修改网站存放路径
Vim /etc/httpd/conf/httpd.conf
/DocumentRoot 筛选找到该行
DocumentRoot “/web” 我会在根目录下创建web文件夹
Mkdir /web
[root@www conf]# ll -Z -d /var/www/html/ 将系统设定的路径下的上下文弄出来
drwxr-xr-x. root rootsystem_u:object_r:httpd_sys_content_t:s0 /var/www/html/
[root@www conf]# chcon -R -thttpd_sys_content_t /web 将之前的上下文添加到你需要放置的路劲文件上
Vim /web/index.html 编辑网页内容
/etc/init.d/httpd restart
在浏览器中输入192.168.18.112:81 可以看到你之前修改完后路劲上的网页信息
虚拟主机
基于一个ip多个域名
如果在你apache服务器中没有配置DNS服务器的想要通过域名访问你网站,进行如下操作
Vim /etc/hosts
192.168.18.112 www.haohaogelaile.comluowenhao 将ip和域名相对应
192.168.18.112 www.baidu.com baidu
随后创建两个不同网站的文件路径
Mkdir /web
Mkdir /web1
chcon -R -t httpd_sys_content_t /web
chcon -R -t httpd_sys_content_t /web1
vim /web/index.html 在两个网页填写不同的内容来区分
vim /web1/index.html
vim /etc/httpd/conf/httpd.conf
NameVirtualHost 192.168.18.112:80 指明虚拟主机的ip和端口
<VirtualHost 192.168.18.112:80>
ServerAdmin haohaogelaile@qq.com 虚拟主机管理员邮箱
DocumentRoot /web1 虚拟主机的文件路径
ServerName www.haohaogelaile.com虚拟主机域名
ErrorLog logs/dummy-host.example.com-error_log 日志存放路径和名称
CustomLog logs/dummy-host.example.com-access_log common
</VirtualHost>
<VirtualHost 192.168.18.112:80>
ServerAdmin haohaogelaile@qq.com
DocumentRoot /web2
ServerName www.baidu.com
ErrorLog logs/dummy-host.example.com-error_log
CustomLog logs/dummy-host.example.com-access_log common
</VirtualHost>
虚拟主机存在优先级,在配置文件中从上倒下,第一个网页可以使用ip或者域名直接访问,第二个则必须使用域名才能访问
对网站进行加密
[root@www conf]# yum list | grep mod_ssl
mod_ssl.x86_64 1:2.2.15-15.el6 luo.repo
[root@www conf]# yum install mod_ssl.x86_64–y
[root@www conf]# cd /etc/pki/tls/certs/ 在此路径下添加证书
[root@www certs]# make haohaogelaile.pem 生成好好哥来了这个证书
umask 77 ; \
PEM1=`/bin/mktemp /tmp/openssl.XXXXXX` ; \
PEM2=`/bin/mktemp /tmp/openssl.XXXXXX` ; \
/usr/bin/openssl req -utf8 -newkey rsa:2048 -keyout $PEM1 -nodes -x509-days 365 -out $PEM2 -set_serial 0 ; \
cat $PEM1 > haohaogelaile.pem; \
echo "" >>haohaogelaile.pem ; \
cat $PEM2 >> haohaogelaile.pem ; \
rm -f $PEM1 $PEM2
Generating a 2048 bit RSA private key
..........+++
...........+++
writing new private key to‘/tmp/openssl.LyXtf7‘
-----
You are about to be asked to enterinformation that will be incorporated
into your certificate request.
What you are about to enter is what iscalled a Distinguished Name or a DN.
There are quite a few fields but you canleave some blank
For some fields there will be a defaultvalue,
If you enter ‘.‘, the field will be leftblank.
-----
Country Name (2 letter code) [XX]:CN 国家中国
State or Province Name (full name) []:BJ 省会 北京
Locality Name (eg, city) [Default City]:BJ 城市 北京
Organization Name (eg, company) [DefaultCompany Ltd]:WANGDONG 公司
Organizational Unit Name (eg, section)[]:YUNWEI 部门
Common Name (eg, your name or your server‘shostname) []:haohaogelaile.com 主机名
Email Address []:haohaogelaile@qq.com 邮箱
[root@www certs]# chmod o+xhaohaogelaile.pem
Vim /etc/httpd/conf.d/ssl.conf
SSLCertificateFile/etc/pki/tls/certs/haohaogelaile.pem 去掉#号同时将你证书生成的路径填在后面
SSLCertificateKeyFile/etc/pki/tls/certs/haohaogelaile.pem 同上
Vim /etc/httpd/conf/httpd.conf
NameVirtualHost *:443 将此处的端口换成443,443是网站加密过后的端口
<VirtualHost *:443> 此处也换成443
ServerAdmin haohaogelaile@qq.com
DocumentRoot /web1
ServerName www.haohaogelaile.com
SSLEngine on 加密打开
SSLCertificateFile /etc/pki/tls/certs/haohaogelaile.pem 指向之前加密证书的路径
SSLCertificateKeyFile /etc/pki/tls/certs/haohaogelaile.pem
ErrorLog logs/dummy-host.example.com-error_log
CustomLog logs/dummy-host.example.com-access_log common
</VirtualHost>
<VirtualHost *:443> 如果有多个网站添加多个如下
ServerAdmin haohaogelaile@qq.com
DocumentRoot /web
ServerName www.baidu.com
SSLEngine on
SSLCertificateFile /etc/pki/tls/certs/haohaogelaile.pem
SSLCertificateKeyFile /etc/pki/tls/certs/haohaogelaile.pem
ErrorLog logs/dummy-host.example.com-error_log
CustomLog logs/dummy-host.example.com-access_log common
</VirtualHost>
用浏览器访问https:192.168.18.112:443 会出现证书风险的提示毕竟是自己弄得玩的,要没风险的是要钱滴!
多个ip对应多个域名
首先在虚拟机中添加一块网卡,为eth1为192.168.18.113
Vim /etc/hosts
192.168.18.112 www.haohaogelaile.comluowenhao
192.168.18.113 www.baidu.com baidu
Vim /etc/httpd/conf/httpd.conf
<VirtualHost 192.168.18.112:443> 在此处将*换成你所需要替代的ip
ServerAdmin haohaogelaile@qq.com
DocumentRoot /web1
ServerName www.haohaogelaile.com
SSLEngine on
SSLCertificateFile /etc/pki/tls/certs/haohaogelaile.pem
SSLCertificateKeyFile /etc/pki/tls/certs/haohaogelaile.pem
ErrorLog logs/dummy-host.example.com-error_log
CustomLog logs/dummy-host.example.com-access_log common
</VirtualHost>
<VirtualHost 192.168.18.113:443> 同上
ServerAdmin haohaogelaile@qq.com
DocumentRoot /web
ServerName www.baidu.com
SSLEngine on
SSLCertificateFile /etc/pki/tls/certs/haohaogelaile.pem
SSLCertificateKeyFile /etc/pki/tls/certs/haohaogelaile.pem
ErrorLog logs/dummy-host.example.com-error_log
CustomLog logs/dummy-host.example.com-access_log common
</VirtualHost>
/etc/init.d/httpd restart
/etc/init.d/network restart
测试在浏览器中输入https://192.168.18.112::443 可以看到第一个网页信息
https://192.168.18.113::443 可以看到第二个网页的信息
常见问题
(一)
启动apache遇到错误:httpd: Could not reliablydetermine the server‘s fully qualified domain name
[root@server httpd-2.2.4]# /etc/init.d/httpd start
httpd: Could not reliably determine the server‘s fully qualified domain name,using 127.0.0.1 for ServerName
[root@server ~]# cd /etc/httpd/conf/httpd.conf 进入apache的安装目录
[root@server conf]# ls
extra httpd.conf magic mime.types original
[root@server conf]# vi httpd.conf 编辑httpd.conf文件,搜索"#ServerName",添加ServerName localhost:80
#ServerName www.example.com:80
ServerName localhost:80
3)再重新启动apache 即可。
[root@server ~]# /etc/init.d/htttpd restart
(二)
(OS 10048)通常每个套接字地址 (协议/网络地址/端口) 只允许使用一次:
make_sock: could not bind to address 0.0.0.0:80...”
一般是IIS或其他程序占用了80端口引起的,引起的原因,可以参考:
http://wiki.apache.org/httpd/CouldNotBindToAddress
我是由于安装了Skype,开着Skype占用了80端口
几种可能的解决方案:
(1)由于服务器的80端口被占用引起的,如果是windows的话就是IIS,停掉Default Web Site就可以了;
(2)将httpd.conf中的Listen 80行改为 Listen 81,换一个端口
(3)将httpd.conf中的Listen 80行改为 Listen 127.0.0.1:80
(三)
服务器总共2个VirtualHost ,apachectl restart的时候却出现了下面的警告提示:
[warn] _default_ VirtualHost overlap onport 80, the first has precedence
这个,大概意思就是后面新增加的这个个VirtualHost 由于端口被占用,不能生效,沿用第一个虚拟主机的配置。
检查了一下,发现,原来在httpd.conf里,我没有把#NameVirtualHost *:80前的注释去掉,导致这个没有生效。
去掉#之后restart,问题解决,网站可以正常访问。
本文出自 “浩浩哥来了” 博客,谢绝转载!
Apache 的修改端口,虚拟主机搭建基于网站加密和常见问题解答
原文地址:http://8292004.blog.51cto.com/8282004/1569628