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_name$request_uri; } server { listen 443 ssl; server_name YOURDOMAIN.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://WEBSERVERIP/; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Forwarded-SSL on; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_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