什么是反向代理 Reverse Proxy?
反向代理是在真实服务器与客户端间的代理服务器, 当使用者透过客户端 (浏览器) 访问网站时, 反向代理服务器会将请求转送到背后的真实服务器, 再将网站的结果传送给客户端。真实服务器可能是本机的其他 Port, 也可能在内部网络, 或者在其他外部网络, 这样使用者不会知道真实的服务器在那里, 可以隐藏真正服务器的位置, 而且也可以实现 load balancing.
安装 Nginx 可以用 yum 或 apt-get 安装:
$ sudo yum install nginx
或
$ sudo apt install nginx
然后启动 Nginx 及设定开机自动启动:
$ sudo systemctl start nginx
$ sudo systemctl enable nginx
$ sudo systemctl enable nginx
当安装了 Nginx 后, 开启 Nginx 的设定档:
$ sudo vim /etc/nginx/conf.d/default.conf
加入以下内容:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
server{ listen 80; server_name example.yourdomain.com; location / { # 后端的 Web Server, 即真实服务器: proxy_pass http://www.your-real-domain.com; # 定义 header 变量, 记录使用者的 IP proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $http_x_forwarded_proto; proxy_max_temp_file_size 0; } } |
上面设定了网域 example.yourdomain.com, 而后端真实服务器是 http://www.your-real-domain.com.
由于真实服务器与使用者中间有反向服务器, 要取得使用者的 IP, 不能用默认的方法。
上面的例子中, 在真实服务器的 PHP 程式内, 要取得使用者的 IP, 需要用 $_SERVER[‘HTTP_X_REAL_IP’] 或 $_SERVER[‘HTTP_X_FORWARDED_FOR’] 取得.
设定后先检查设定档的语法是否正确:
$ sudo nginx -t
如果没有错误, 便可以重新加载 Nginx 的新设定:
$ sudo nginx -s reload
现在当有访问 Nginx 时, 便会加载 http://www.your-real-domain.com 的内容.