文章目录
Nginx代理及其他应用
一、Nginx的代理应用
1.什么是代理
2.代理的类型
正向代理:代理服务器代理客户端向服务端发送请求的
服务端不清楚真是访问的客户端是谁
反向代理:代理服务器代理服务端接受客户端的请求
客户端不知道真实的服务端是谁
日常互联网中一般使用反向代理作为服务端部署环境。正向代理常用来做渗透测试的工具
3.实现代理功能
1.正向代理的实现
环境准备:代理服务器 10.0.0.5 proxy
网站服务器 10.0.0.11 web
2.在代理服务器部署代理应用
#安装
yum install nginx -y
#配置nginx正向代理
vim /etc/nginx/conf.d/pos-proxy.conf
server {
listen 999;
resolver 223.5.5.5;
location / {
proxy_pass http://$host$request_uri; #设定代理服务器的协议和地址
proxy_set_header HOST $host;
proxy_buffers 256 4k;
proxy_max_temp_file_size 0k;
proxy_connect_timeout 30;
proxy_send_timeout 60;
proxy_read_timeout 60;
proxy_next_upstream error timeout invalid_header http_502;
}
}
#客户端通过代理访问网站
通过火狐浏览器访问:配置代理
命令行:curl -x 10.0.0.5:999 10.0.0.11
#浏览器测试访问10.0.0.11
#DDOS
通过大量并发性流量请求,导致被攻击主机无法建立其他连接
##DDOS攻防
#在web服务器检查访问者来源ip
tail -f /usr/local/nginx/logs/access.log
4.nginx实现反向代理
1.服务端本地代理
环境:反向代理节点:10.0.0.11:1000 --> 10.0.0.11:1234
2.部署本地站点
cat >/usr/local/nginx/conf/conf.d/proxy-test.conf<<'EOF'
server {
listen 1234;
server_name localhost;
root /html/proxy-test;
index index.html;
}
EOF
mkdir /html/proxy-test -p
echo '测试代理' >/html/proxy-test/index.html
3.通过反向代理实现代理后端站点
#本地代理
vim /usr/local/nginx/conf/conf.d/proxy-test.conf
server {
listen 1000;
server_name proxy.dms.com;
location / {
proxy_pass http://10.0.0.11:1234;
}
}
5.远程反向代理
环境准备:代理服务器 10.0.0.5 proxy
网站服务器 10.0.0.11 web
环境:反向代理节点:10.0.0.5:1000 --> 10.0.0.11:1234
#代理服务器配置反向代理
vim /etc/nginx/conf.d/neg-proxy.conf
server {
listen 1000;
server_name proxy.dms.com;
location / {
proxy_pass http://10.0.0.11:1234;
}
}
环境2:环境:反向代理节点:10.0.0.5 proxy.dms.com --> 10.0.0.11 proxy.dms.com
web站点配置:
server {
listen 80;
server_name proxy.dms.com;
root /html/proxy-test;
index index.html;
}
代理服务器配置
server {
listen 80;
server_name proxy.dms.com;
location / {
proxy_pass http://10.0.0.11;
proxy_set_header HOST $host; #规定代理过程中的host
proxy_http_version 1.1; #规定代理过程中的协议版本
}
}
远程代理存在问题
- 反向代理过程中host没有携带
- 代理过程中协议版本默认使用1.0版本
6.反向代理https网站问题
# 传输证书到代理服务器
scp -r /usr/local/nginx/conf/ssl 10.0.0.5:/etc/nginx/
#为代理文件配置证书
server {
listen 443 ssl;
server_name wordpress.dms.com;
ssl_certificate ./ssl/ca.crt;
ssl_certificate_key ./ssl/private.pem;
location / {
proxy_pass https://10.0.0.11;
proxy_set_header HOST $host;
proxy_http_version 1.1;
}
}
server {
listen 80;
server_name wordpress.dms.com;
location / {
rewrite (.*) https://$host$uri permanent;
}
}
二、Nginx日志管理
1.有哪些日志
访问日志:用于记录访问者的信息
错误日志:用于记录Nginx处理http请求的错误信息
/usr/local/nginx/logs/
/var/log/nginx/
#开启日志
vim /usr/local/nginx/conf/nginx.conf
取消注释
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log logs/access.log main;
2.访问日志
/usr/local/nginx/logs/access.log
/var/log/nginx/access.log
#日志格式
$remote_addr #访问者的来源IP
$remote_user #访问者的用户信息
[$time_local] #访问时间
"$request #记录访问者的请求的URL信息
$status #状态码
$body_bytes_sent #请求资源包大小
"$http_referer" #页面转发来源
'"$http_user_agent" #客户端信息
"$http_x_forwarded_for"' #真实IP的链路追踪
$remote_addr | $remote_user | $time_local | $request | $status | $body_bytes_sent | $http_referer | $http_user_agent | $http_x_forwarded_for |
---|---|---|---|---|---|---|---|---|
访问者的来源IP | 访问者的用户信息 | 访问时间 | 记录访问者的请求的URL信息 | 状态码 | 请求资源包大小 | 页面转发来源 | 客户端信息 | 真实IP的链路追踪 |
定义访问日志
#单独对wordpress存放日志
在子配置文件的server中单独定义
server {
listen 443 ssl;
server_name wordpress.dms.com;
root /html/wordpress;
index index.html index.php;
ssl_certificate ./ssl/ca.crt;
ssl_certificate_key ./ssl/private.pem;
access_log logs/access-wordpress.log main;
}
代理节点记录真实访问IP
# 配置代理记录用户真实访问ip
proxy_set_header X-Real-IP $remote_addr; # 记录当前接收请求的来源ip
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 记录当前真实ip到x-forwarded中
##多级代理:每一级代理都需要开启记录X-Forwarded-For
server {
listen 443 ssl;
server_name wordpress.dms.com;
ssl_certificate ./ssl/ca.crt;
ssl_certificate_key ./ssl/private.pem;
location / {
proxy_pass https://10.0.0.11;
proxy_set_header HOST $host;
proxy_http_version 1.1;
# 记录当前接收请求的来源ip
proxy_set_header X-Real-IP $remote_addr;
# 记录当前真实ip到x-forwarded中
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
server {
listen 80;
server_name wordpress.dms.com;
location / {
rewrite (.*) https://$host$uri permanent;
}
}
3.错误日志
/usr/local/nginx/logs/error.log
/var/log/nginx/error.log
#定义错误日志
error_log logs/error.log 记录日志的信息的级别
info #基本信息全记录
warn #警告级别以上都会记录
error #只记录error报错