Linux的http404错误界面、HTTP服务配置、http负载均衡、ssl加密、不同域名访问、关于中文网站访问乱码的解决方案

http404错误界面

编辑/etc/httpd/conf/httpd.conf文件
找到
#ErrorDocument 500 "The server made a boo boo."
#ErrorDocument 404 /missing.html
#ErrorDocument 404 "/cgi-bin/missing_handler.pl"
#ErrorDocument 402 http://www.example.com/subscription_info.html
第二行是显示404错误信息的,当客户访问你的网页出现404错误,即找不到网页,会显示该文件内的内容。该文件是需要自行建立的。
*注意:该文件建立的地点关系到你的网页是否会显示你设定的404错误(默认该文件的地点是/var/www/error)。也就是说,你的404错误页面放在哪个站点根目录下,哪个网页的404错误页面就会和你设定的一样。
重启服务,访问你发布的网页,网址后面乱打一串,如:
	//192.168.1.2/wolaileahahha
看看显示的是不是你设定的404错误页面?

*注意:如果404页面的大小小于512b,则IE会认为404不够友好,则不会显示。



_________________________


以上做法是公共的。
如果有多个网站,每个网站的错误界面设定不同或名字不同则行不通。在需要其他错误界面如403 405时也不够用。

所以有上述假设情况的时候,编辑/etc/httpd/conf/httpd.conf文件,跳至837行(83%处)有一部分类似别名目录的设定,复制到相应的网站设定内(需要修改的地方同理别名目录)。
修改路径时不能修改/error/。后面的路径可以自定义。


alias /error/ "/var/www/error/"

<ifmodule mod_negotiation.c>
<ifmodule mod_include.c>
    <directory "/var/www/error">
        allowoverride none
        options includesnoexec
        addoutputfilter includes html
        addhandler type-map var
        order allow,deny
        allow from all
        LanguagePriority en es de fr
        ForceLanguagePriority Prefer Fallback
    </Directory>

</IfModule>
</IfModule>

*注:千万不要漏了最后两行!!最后两行在下面的设定之后(870行,86%处),容易忽略。

然后从852行(84%处)往下看是各种错误设定,复制需要的错误界面到相应的网站设定中,修改错误文件路径即可。
文件路径修改时不能修改error目录,只需要修改后面的文件名。系统只认error目录

#    ErrorDocument 400 /error/HTTP_BAD_REQUEST.html.var
#    ErrorDocument 401 /error/HTTP_UNAUTHORIZED.html.var
#    ErrorDocument 403 /error/HTTP_FORBIDDEN.html.var
#    ErrorDocument 404 /error/HTTP_NOT_FOUND.html.var
#    ErrorDocument 405 /error/HTTP_METHOD_NOT_ALLOWED.html.var
#    ErrorDocument 408 /error/HTTP_REQUEST_TIME_OUT.html.var
#    ErrorDocument 410 /error/HTTP_GONE.html.var
#    ErrorDocument 411 /error/HTTP_LENGTH_REQUIRED.html.var
#    ErrorDocument 412 /error/HTTP_PRECONDITION_FAILED.html.var
#    ErrorDocument 413 /error/HTTP_REQUEST_ENTITY_TOO_LARGE.html.var
#    ErrorDocument 414 /error/HTTP_REQUEST_URI_TOO_LARGE.html.var
#    ErrorDocument 415 /error/HTTP_UNSUPPORTED_MEDIA_TYPE.html.var
#    ErrorDocument 500 /error/HTTP_INTERNAL_SERVER_ERROR.html.var
#    ErrorDocument 501 /error/HTTP_NOT_IMPLEMENTED.html.var
#    ErrorDocument 502 /error/HTTP_BAD_GATEWAY.html.var
#    ErrorDocument 503 /error/HTTP_SERVICE_UNAVAILABLE.html.var
#    ErrorDocument 506 /error/HTTP_VARIANT_ALSO_VARIES.html.var


***注意,403绑定页面名为noindex,404绑定页面名为nofile
HTTP服务配置
安装httpd服务

1.
挂载光盘

2.
安装相应的软件包

3.
配置文件	/etc/httpd/conf/httpd.conf
跳到文件末尾,复制第972行以及倒数七行:
NameVirtualHost *:80				(如果后面要改端口,则该行可不复制。但如果多个网页是分不同域名访问的,这一句一定要。)
<VirtualHost *:80>
    ServerAdmin [email protected]		(出现错误的时候接受错误邮件的邮箱。)
    DocumentRoot /www/docs/dummy-host.example.com		(服务文件所在目录)
    ServerName dummy-host.example.com			(域名)
    ErrorLog logs/dummy-host.example.com-error_log		(错误日志)
    CustomLog logs/dummy-host.example.com-access_log common	(不知道= =)
</VirtualHost>
根据需求改动相应内容。
3.1
	<VirtualHost *:80>
	</VirtualHost>
往该两段内添加一行(可到391行(文件38%处)复制):
	DirectoryIndex  相应文件名	(首先访问的文件,也就是首页。一般是index.html)

4.
更改接收数据端口
4.1
	<VirtualHost *:80>
80改为相应的端口。
跳到文件的132行(也就是12%处),更改Listen 80。将80端口改为相应的端口。
保存退出。

5.
别名目录
5.1
到文件的547行(也就是54%处)复制以下内容到末尾:
Alias /icons/ "/var/www/icons/"

<Directory "/var/www/icons">
    Options Indexes MultiViews
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>
第一行的双斜杠内填写相应的目录名,双引号内填目录所在地。
第二行的双引号内填写的也是目录所在地。
假设别名目录为abc,所在地为/www/abc:
Alias /abc/ "/www/abc/"
<Directory "/www/abc/">
**注:两个所在地后面最好加上/符!特别是第一个!
5.2
以上是直接访问别名目录。如果要设置用户访问,则先创建一个http用户:
	htpasswd  -c  目录  用户名
目录指用户详情文件所在地。后面再添加用户时,则不用再加-c参数。如果再加-c则有可能会覆盖掉原先的文件。
第二次添加用户
	htpasswd   目录  用户名
接下来进入httpd.conf。还是在末尾,写入以下内容:
Alias /abc/ "/www/abc/"

<Directory "/www/abc">
	authname		"huanyin"			(登录用户时弹框上的提示语)
	authtype		Basic			(用户验证类型,默认Basic)
	authuserfile	/etc/httpd/htpasswd		(用户详情文件所在的目录)
	require user	http			(能访问的用户)
</Directory>
也可不删除之前直接访问别名目录的设定,这样虽然访问时依旧要用户,但重启服务时会有错误提示。
保存退出。

6.
生效

7.
访问。
直接访问主页:	http:\\服务器IP
访问别名目录:	http:\\服务器IP\别名目录名
http负载均衡

HTTP负载均衡

当一个网页访问量过大,可能会导致服务器崩溃,这时候就要做负载均衡。负载均衡指两台服务器同时做web服务器,两个服务器上发布同一网页,客户端访问的时候会随机指向一台服务器,这样就起到了分流的作用,可以减小服务器的压力。负载均衡还可以起到辅助区域的作用,如果一台服务器崩溃,另一台服务器还在工作,就不会导致客户端无法访问网页。


大致步骤

1.需要两台linux服务器,两台都要做http
2.服务器1上编辑sysctl.conf文件,开启路由转发功能。
3.挂载光盘,安装ipvsadm*。
4.添加虚拟服务器,添加真实服务器到虚拟服务器。
5.服务器2允许虚拟IP通过网卡,添加路由路径。
6.也要开启路由功能,还要添加四行代码。
7.测试


具体步骤
**服务器1:做主 ip为:192.168.100.1/24
**服务器2:做后端服务器 ip为:192.168.100.3/24
**为了显示效果,两个服务器的网页内容设置的不一样。
**这里的虚拟网卡全部是临时设置,注意不要随意重启网卡,否则一重启虚拟IP就没了……

服务器1

#ifconfig eth0:1 192.168.100.10 netmask 255.255.255.0
添加虚拟网卡eth0:1
#vim /etc/sysctl.conf
net.ipv4.ip_forward = 1

# Controls source route verification
net.ipv4.conf.default.rp_filter = 1

# Do not accept source routing
net.ipv4.conf.default.accept_source_route = 0

# Controls the System Request debugging function
kernel.sysrq = 0

# Controls whether core dumps will append the PI
# Useful for debugging multi-threaded applicatio
kernel.core_uses_pid = 1

# Controls the use of TCP syncookies
net.ipv4.tcp_syncookies = 1

编辑该文件,开启路由转发功能。保存退出。
可以用sysctl -p 读取修改后的内容
安装ipvsadm

[root@localhost ~]# mount /dev/cdrom /media/cdrom/
mount: block device /dev/cdrom is write-protected, mounting read-only
[root@localhost ~]# cd /media/cdrom/CentOS/
[root@localhost CentOS]# ls | grep ipvsadm
ipvsadm-1.24-10.i386.rpm
[root@localhost CentOS]# rpm -ivh ipvsadm*

然后
ipvsadm –A –t 192.168.100.10:80 –s wlc
添加虚拟服务器 IP为192.168.100.10 端口为80  调度算法为 wlc
Ipvsadm –a –t 192.168.100.10:80 –r 192.168.100.1 –g
Ipvsadm –a –t 192.168.100.10:80 –r 192.168.100.3 –g
添加真实服务器到虚拟服务器

echo ' aaa' > /var/www/html/index.html
添加默认主页内容
重启http服务


服务器2

ifconfig lo:0 192.168.100.10 netmask 255.255.255.255 broadcast 192.168.100.10 up
route add -host 192.168.100.10 dev lo:0
允许虚拟IP通过网卡 添加路由路径
然后把下面四句添加在/etc/sysctl.conf文件最后来关闭arp
同时开启转发功能(修改地方同服务器1)
 net.ipv4.conf.lo.arp_ignore = 1
 net.ipv4.conf.lo.arp_announce = 2
 net.ipv4.conf.all.arp_ignore = 1
 net.ipv4.conf.all.arp_announce = 2
用 sysctl –p 读取修改后的内容

echo ' bbb' > /var/www/html/index.html
添加默认主页内容
重启http服务

测试:访问虚拟IP192.168.100.10
成功√


=======================错误解析=======================

Q访问时,只能访问到一方服务器。主服务器或副服务器没起效。
A主服务器的ipvsadm有问题。重新把那三句话打一遍。如果提示此服务已存在之类的,则重启ipvsadm服务,然后再重打三句话即可。

Q访问虚拟IP失败,显示网址无效
A添加新网卡的IP应该和虚拟IP一样。
ssl加密
大致步骤:
安装服务http*,openssl*,mod_ssl*
创建秘钥(需要输入两次密码,第一次是秘钥密码,第二次是证书密码),证书
编辑httpd.conf文件添加一行模板
修改ssl.conf,改变秘钥和证书的路径,填写网站路径和域名
重启httpd服务,输入证书密码,重启成功。
访问网页(https模式)导入证书
访问成功


详细步骤:

1.安装服务http*,openssl*,mod_ssl*

2.创建秘钥
[root@localhost ~]# cd /etc/pki/tls/certs/
[root@localhost certs]# make auth.key
umask 77 ; \
        /usr/bin/openssl genrsa -des3 1024 > auth.key
Generating RSA private key, 1024 bit long modulus
...................................................++++++
........++++++
e is 65537 (0x10001)
Enter pass phrase:				[密码]
Verifying - Enter pass phrase:			[密码]

3.创建证书,填写证书信息
  Common Name要和ssl.conf里的servername一致,否则可能重启服务失败[未验证]

[root@localhost certs]# make auth.crt
umask 77 ; \
        /usr/bin/openssl req -utf8 -new -key auth.key -x509 -days 365 -out auth.
crt -set_serial 0
Enter pass phrase for auth.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [GB]:CN					[国家]
State or Province Name (full name) [Berkshire]:guangdong		[地区]
Locality Name (eg, city) [Newbury]:shenzhen				[城市]
Organization Name (eg, company) [My Company Ltd]:lyt			[机构]
Organizational Unit Name (eg, section) []:lyt				[机构全称]
Common Name (eg, your name or your server's hostname) []:www.abc.com	[域名]
Email Address []:							[邮箱]

4.编辑httpd.conf文件

[root@localhost certs]# vim /etc/httpd/conf/httpd.conf
#添加以下内容
LoadModule ssl_module /etc/httpd/modules/mod_ssl.so
#保存退出

5.编辑ssl.conf文件

[root@localhost certs]# vim /etc/httpd/conf.d/ssl.conf
<VirtualHost _default_:443>
#DocumentRoot "/var/www/html"
#ServerName www.example.com:443
#去掉井号,修改网站路径和域名
SSLCertificateFile /etc/pki/tls/certs/localhost.crt
SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
#改成
SSLCertificateFile /etc/pki/tls/certs/auth.crt
SSLCertificateKeyFile /etc/pki/tls/certs/auth.key

6.修改证书所在目录

[root@localhost certs]# cd /etc/pki/tls/certs
[root@localhost certs]# ls
auth.crt  auth.key  ca-bundle.crt  localhost.crt  make-dummy-cert  Makefile
#根据步骤5,SSLCertificateKeyFile的路径更改auth.key的路径

7.重启httpd服务,输入证书密码

8.访问。https://服务器ip
  导入证书,刷新页面,成功。


=================

如果仅要求别名目录加密访问,则在ssl.conf文件内手动填写相应的alias设定。
servername 这里除了改成相应访问域名,还要在域名后面添加相应的别名目录
e.g.
servername www.abc.com/https:443

不同域名访问

条件
#不同域名
#每个域名绑定IP不同

NameVirtualHost *:80

添加上面一句话,*:80改为本机IP

<VirtualHost *:80>

*:80改为相对应的域名

重启服务。

----------------------------

。不知道是上面笔记做错了还是条件不同…总之再写一个方案。

----------------------------

条件
#不同域名
#每个域名绑定IP不同

NameVirtualHost *:80

添加上面一句话,*:80改为本机域名

<VirtualHost *:80>

*:80改为相对应的IP

重启服务。
关于中文网站访问乱码
 
 
最简便的方式——直接更改网页编码(右击-编码-简体中文(GB2312))
更改配置文本
#vim /etc/httpd/conf/httpd.conf
搜索UTF-8,找到以下
	AddDefaultCharset UTF-8
把UTF-8改为GBK或者GB2312,保存退出,重启httpd服务
重新访问网页会发现乱码已经正常显示。
如果还是乱码则试着在intert选项卡内清除缓存,重新访问页面


猜你喜欢

转载自blog.csdn.net/kamroselee/article/details/80371740