nginx作为一个反向代理器和负载均衡器,它的优点体现在许多方面,我们先从配置文件入手,看看nginx可以实现的功能:
一.nginx的虚拟主机:
1.在nginx目录下编辑中配置文件,生成虚拟主机:
虚拟主机技术主要应用于HTTP(Hypertext Transfer Protocol,超文本传输协议)服务,将一台服务器的某项或者全部服务内容逻辑划分为多个服务单位,对外表现为多个服务器,从而充分利用服务器硬件资源。
server {
listen 80;
server_name www.westos.org; # 域名为www.westos.org
location / {
root /www1; # 第一台虚拟主机的发布目录
index index.html;
}
}
server {
listen 80;
server_name www.linux.org; # 域名为www.linux.org
location / {
root /www2; # 第二台虚拟主机的发布目录
index index.html;
}
}
2.在根下建立两个目录/www1和/www2,在里边写默认发布文件index.html
3.在物理机做解析172.25.1.5 www.westos.org www.linux.org
4.重启nginx
nginx -s reload
二.实现https加密
1.编辑nginx的配置文件配置文件
# HTTPS server
#
server {
listen 443 ssl;
server_name www.westos.org;
ssl_certificate cert.pem; # https认证的锁和钥匙
ssl_certificate_key cert.pem;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
root /www1;
index index.html index.htm;
}
}
2.nginx -t 检测语法是否错误
3.在cd /etc/pki/tls/cd cert目录下
make cert.pem #获得证书
cp cert.pem /usr/local/lnmp/nginx/conf/
#将锁子和钥匙放在nginx的配置文件目录下
4.重新加载nginx,在测试端测试,发现浏览器的地址栏前会自动加上https://
nginx -s reload
三.重定向:
1.将westos.org 重定向到 www.westos.org
server {
listen 80;
server_name www.westos.org westos.org;
rewrite ^(.*)$ https://www.westos.org permanent; #用通配符表示这两个域名
# 访问westos.org或www.westos.org的时候跳转到https://www.westos.org
#location / {
# root /www1;
# index index.html;
#}
}
2.将www.westos.org/bbs 定向到 bbs.westos.org(将westos下的一个子目录定向到一个新的站点)
server {
listen 80;
server_name www.westos.org westos.org;
rewrite ^/bbs$ https://bbs.westos.org permanent;
#利用通配符实现重定向 permanent表示永久重定向
location / {
root /www1;
index index.html;
}
}
在物理机解析写bbs.westos.org,将/www2下改为bbs.westos.org
3.将www.westos.org/bbs/index.html重定向到 https://bbs.westos.org/index.html
server {
listen 80;
server_name www.westos.org westos.org;
#rewrite ^(.*)$ https://www.westos.org$1 permanent;
rewrite ^/bbs$ https://bbs.westos.org permanent;
rewrite ^/bbs/(.*)$ https://bbs.westos.org/$1 permanent;
location / {
root /www1;
index index.html;
}
}
在/www1下写bbs目录:index.html—>www.westos.org -bbs
4.反向重定向bbs.westos.org—> https://www.westos.org/bbs/
server {
listen 80;
server_name www.westos.org westos.org;
#rewrite ^(.*)$ https://www.westos.org$1 permanent;
#rewrite ^/bbs$ https://bbs.westos.org permanent;
#rewrite ^/bbs/(.*)$ https://bbs.westos.org/$1 permanent;
location / {
root /www1;
index index.html;
}
}
server {
listen 80;
server_name bbs.westos.org;
rewrite ^(.*)$ https://www.westos.org/bbs$1;
#location / {
# root /www2;
# index index.html;
#}
}
四.对客户端并发量,下载速度的限制
1.限制客户端请求的并发量为1
#gzip on;
limit_conn_zone $binary_remote_addr zone=addr:10m;
location /download { # download是客户端访问nginx的一个发布目录
limit_conn addr 1; # 并发量为1
}
模拟客户端的请求,并发量为1:错误请求为1,在日志中查看每个请求均是200正确
并发量如果是10,大于1:有一个错误请求,在日志中查看只有一个请求被正确回应
2.限制客户端下载速率为50k
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
location /download {
limit_conn addr 1;
limit_rate 50k; # 限制速率为50k
limit_req zone=one burst=5;
}
五.访问控制
1,允许ip为172.25.1.250的主机访问,别的主机访问全部禁止
location /admin/{
allow172.25.1.250;
# ip为172.25.1.250的主机到达,和第一个访问控制的条件匹配,允许通过
# 别的ip的主机到达和deny中的all匹配,禁止访问
deny all;
}
别的ip不允许:
2.允许特定网段访问
location /admin/{
allow 172.25.0.0/24; # 允许172.25.0.0/24这个网段访问
deny all;
}
六.防止恶意
server {
listen 80;
server_name _; # 所有主机到达,访问默认页面,恢复500报错或重定向到指定站点
#return 500;
rewrite ^(.*) http://www.westos.org permanent;
# 访问默认主页时,跳转到www.westos.org
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
#root /usr/local/tomcat/webapps/ROOT;
index index.html index.htm;
}
七.网页乱码问题,nginx默认不支持汉语,为了防止网页乱码的问题,我们可以这样解决:
location /admin/{
#allow 172.25.1.250;
#deny all;
charset utf-8;
}
access_log off; # 在要访问的位置
九.防盗链机制
在一台主机的apach默认发布文件下:
# 盗取server5上的图片
# 通过这种方式我们可以盗取server5上的图片信息,从而达到“没有付出而得到客户端流量的盗链行为”
在server5的配置文加中加上防止盗连的条件(如果访问的域名是jay.westos.org),那么不用防
location ~ .*\.(gif|jpg|png)$ {
valid_referers jay.westos.org;
if ($invalid_referer) {
return 403;
}
如果想要在防盗连的界面出来防盗连的图片,那么可以将该盗连访问重定向到指定图片位置:
location ~ .*\.(gif|jpg|png)$ {
valid_referers jay.westos.org;
if ($invalid_referer) {
#return 403;
rewrite ^/ http://bbs.westos.org/daolian.jpg; # 重定向到名为daolian的图片
}
server {
listen 80;
server_name bbs.westos.org;
#rewrite ^(.*)$ https://www.westos.org/bbs$1;
location / {
root /www2;
index index.html;
}
在/www2下放防盗连的图片...