Nginx是一个小而精悍的Web服务器,在Apache一统天下的时候,依然可以占据非常可观的市场份额。过去大家对于Nginx的主要看法在于其省资源(特别是内存)以及对静态文件的强大处理,不仅如此,Nginx的“反代”功能也让其在最小资源占用下实现间(dai)接(li)访问。那么,反向代理一般使用做什么用途呢?举个最正能量的例子,当网站域名受到DDOS攻击的时候,不配备防DDOS的服务器(或者ip)将是非常脆弱的,这时,如果我们能够不做数据迁移,而将网站域名绑定到带有流量清洗的ip下,那是多么的惬意啊。接着,问题来了,我们如何做到网站数据在A服务器,域名绑定在B服务器呢?解决的方案就是配置B服务器的Nginx,使之能够将用户的访问通过B服务器去访问A,而对于用户,虽然他们访问的是B服务器,而实际数据却是从A服务器来的,简而言之,这样做,我们也就“隐藏”了真正存储数据的A服务器。下面我们就来看具体的操作过程:
为Nginx设置反向代理
首先要明确:我们的网站数据在A服务器下,A服务器对外可通过Web访问(Web套件正常配置即可);将域名绑定在B服务器的ip上(A或CNAME)。因此,本文所涉及的Nginx的反代设置,也就是针对于B服务器。
1.安装、配置Nginx
以下是Nginx的配置示例,其中需要根据自己的实际情况修改
server {
listen 80;
server_name YOURDOMAIN.com;
return 301 https://server_namerequest_uri;
}
server {
listen 443 ssl;
server_name 你的域名.com;ssl_certificate /home/ssl/cert.crt;
ssl_certificate_key /home/ssl/cert.key;access_log /home/logs/YOURDOMAIN.com.access.log;
error_log /home/logs/YOURDOMAIN.com.error.log;location / {
proxy_pass https://你的网站IP/;
proxy_redirect off;
proxy_set_header Host host;
proxy_set_header X-Forwarded-SSL on;
proxy_set_header X-Forwarded-Protoscheme;
proxy_set_header X-Real-IP remote_addr;
proxy_set_header X-Forwarded-Forproxy_add_x_forwarded_for;
proxy_max_temp_file_size 0;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;}
}
2.配置iptables防火墙iptables -F
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
iptables -A INPUT -i eth0 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P INPUT DROP