一,基本配置:
ServerRoot "/mnt/software/apache2" #你的apache软件安装的位置。
PidFile logs/httpd.pid #第一个httpd进程号文件位置。
Listen 80 #服务器监听的端口号。
ServerName www.clusting.com:80 #主站点名称。
ServerAlias www.example.com #绑定多个域名。
ServerAdmin [email protected] #管理员的邮件地址。
DocumentRoot "/mnt/web/clusting" #主站点的网页存储位置。
1,以下是对主站点的目录进行访问控制:
<Directory "/mnt/web/clusting">
Options FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
ErrorDocument 403 /403.html
ErrorDocument 404 /404.html
在网站主目录定义网站的错误页面。
<Directory "/opt/case/www.abc.com/test/">
#<FilesMatch "\.(?i:php)$">
<FilesMatch ".*">
Order deny,allow
Deny from all
</FilesMatch>
</Directory>
2,Options配置在特定目录使用哪些特性,常用的值和基本含义如下:
ExecCGI: 在该目录下允许执行CGI脚本。
FollowSymLinks: 在该目录下允许文件系统使用符号连接。
Indexes: 当用户访问该目录时,如果用户找不到DirectoryIndex指定的主页文件(例如index.html),则返回该目录下的文件列表给用户。
SymLinksIfOwnerMatch: 当使用符号连接时,只有当符号连接的文件拥有者与实际文件的拥有者相同时才可以访问。
3,AllowOverride:允许存在于.htaccess文件中的指令类型(.htaccess文件名是可以改变的,其文件名由AccessFileName指令决定):
None: 当AllowOverride被设置为None时。不搜索该目录下的.htaccess文件(可以减小服务器开销)。
All: 在.htaccess文件中可以使用所有的指令。
Order:控制在访问时Allow和Deny两个访问规则哪个优先:
Allow:允许访问的主机列表(可用域名或子网,例如:Allow from 192.168.0.0/16)。
Deny:拒绝访问的主机列表。
DirectoryIndex index.html index.htm index.php #主页文件的设置(本例将主页文件设置为:index.html,index.htm和index.php)
4,设置禁止访问:
NameVirtualHost *:80
<VirtualHost *:80>
ServerName 192.168.222.129
<Location />
Order Allow,Deny
Deny from all
</Location>
</VirtualHost>
(1)只允许某个IP访问二种方法:
Order deny,allow
Deny from all
allow from 192.168.222.1
或:
Order allow,deny
allow from 192.168.222.1
(2)只阻止某个IP访问二种方法:
Order allow,deny
allow from all
deny from 192.168.222.1
或:
Order deny,allow
deny from 192.168.222.1
(3)挡掉百度搜寻引擎
SetEnvIfNoCase User-Agent "^Baidu" bad_bot
SetEnvIfNoCase User-Agent "^sogou" bad_bot
SetEnvIfNoCase User-Agent "^Bloghoo" bad_bot
SetEnvIfNoCase User-Agent "^Scooter" bad_bot
Deny from env=bad_bot
挡掉Google搜寻引擎
SetEnvIf User-Agent "^Googlebot" google
Deny from env=google
注:SetEnvIfNoCase等同于SetEnvIf ,前者仅仅是进行不区分大小写的匹配。
5,设置用户登录验证:
vim .htaccess
AuthName "frank share web"
AuthType Basic
AuthUserFile /tmp/test/.htpasswd
require valid-user
添加用户:htpasswd -c -m .htpasswd test
二,服务器的优化 (MPM: Multi-Processing Modules)
apache2主要的优势就是对多处理器的支持更好,在编译时同过使用--with-mpm选项来决定apache2的工作模式。通过httpd -l命令列出apache的工作方式:
1,prefork:如果httpd -l列出prefork.c,则需要对下面的段进行配置:
<IfModule prefork.c>
ServerLimit 2000 #默认的MaxClient最大是256个线程,如果想设置更大的值,就的加上ServerLimit这个参数。生效前提:必须放在其他指令的前面
MaxClients 1500 #最大并发连接数。
StartServers 10 #启动apache时启动的httpd进程个数。
MinSpareServers 10 #服务器保持的最小空闲进程数。
MaxSpareServers 15 #服务器保持的最大空闲进程数。
MaxRequestsPerChild 10000 #每个子进程被请求服务多少次后被kill掉。0表示不限制。
</IfModule>
将MaxRequestsPerChild设置成非零值有两个好处:
1).可以防止(偶然的)内存泄漏无限进行,从而耗尽内存。
2).给进程一个有限寿命,从而有助于当服务器负载减轻的时候减少活动进程的数量。
2,worker:如果httpd -l列出worker.c,则需要对下面的段进行配置:
<IfModule worker.c>
StartServers 4 #启动apache时启动的httpd进程个数。
MaxClients 300 #最大并发连接数。
MinSpareThreads 25 #服务器保持的最小空闲线程数。
MaxSpareThreads 75 #服务器保持的最大空闲线程数。
ThreadsPerChild 25 #每个子进程的产生的线程数。
MaxRequestsPerChild 0 #每个子进程被请求服务多少次后被kill掉。0表示不限制。
</IfModule>
该模式是由线程来监听客户的连接。当有新客户连接时,由其中的一个空闲线程接受连接。服务器在启动时启动两个进程,每个进程产生的线程数是固定的(ThreadsPerChild决定),因此启动时有50个线程。当50个线程不够用时,服务器自动fork一个进程,再产生25个线程。
三,代理和跳转
1,ProxyPass /aa/ http://www.test.com/
ProxyPassReverse /aa/ http://www.test.com/
关于ProxyPassReverse的配置是反向代理,假如本站为www.example.com,如果192.168.0.1对请求进行了redirect至192.168.0.1/login.php
1)无反向代理时:http://www.example.com/aa/index.html --> http://192.168.0.1/login.php(客户端无法访问);
2)有反向代理时:http://www.example.com/aa/index.html --> http://www.example.com/aa/login.php --> http://192.168.0.1/login.php(由代理服务器转发)。
2,! 指令当你不想对某个子目录进行反向代理的时候就有用了,例如:
ProxyPass /aa/ !
ProxyPass / http://www.test.com
3,跳转以.html结尾的域名
RewriteEngine on
RewriteRule ^/(.*).html$ http://www.test.com/ [L,R]
四,https相关配置
1,安装mod_ssl
yum install mod_ssl
2,用OpenSSL生成证书
1)自签名证书:
openssl genrsa -out httpd.key 1024 生成密钥对
openssl req -x509 -new -key httpd.key -out httpd.crt -days 365 自签名证书
2)签名证书:
第一步是制作 CA 的证书:
openssl genrsa -out my-ca.key 2048
openssl req -x509 -new -days 3650 -key my-ca.key -out my-ca.crt
第二步为自己的服务器生成证书:
openssl genrsa -out ssl/httpd.key 1024 生成密钥对
openssl req -new -key ssl/httpd.key -out ssl/httpd.csr 生成证书申请
openssl x509 -req -in ssl/httpd.csr -out ssl/httpd.crt -CA my-ca.crt -CAkey my-ca.key -CAcreateserial -days 365 生成签名证书
3,虚拟主机配置:
SSLEngine on
SSLCertificateFile /etc/pki/tls/certs/httpd.crt
SSLCertificateKeyFile /etc/pki/tls/certs/httpd.key
五,跨域问题
网站为了静态资源分布式部署,加快访问速度,减轻主站压力,会把静态资源(例如字体文件、图片等)放在独立服务器或者CDN上,并且使用独立的资源域名(例如static.domain.com),但是在实际部署中,会发现浏览器无法载入这些不同域名的资源,这是因为浏览器将其定义为跨域资源而不允许加载。
解决方法如下:
1,开启apache的mod_headers模块
LoadModule headers_module modules/mod_headers.so
2,在static.domain.com的主机配置中加入
Header set Access-Control-Allow-Origin http://www.domain.com