如何使用 Nginx 作为反向代理服务器
N ginx 是一个开源 Web 服务器和反向代理服务器。您可以使用 nginx 进行负载平衡和/或作为代理解决方案,通过主机的单个公共 IP 地址(例如 202.54.1.1)从这些机器内部运行服务。在这篇文章中,我将解释如何将 nginx 安装为 Apache+php5 域(称为 www.example.com)和 Lighttpd 静态资产域(称为 static.example.com)的反向代理服务器。您只需在IP 地址为192.168.1.1的vm00上键入以下命令。
DNS 设置
确保 www.example.com 和 static.example.com 都指向公共 IP 地址 202.54.1.1。
安装 nginx 服务器
键入以下命令来安装 nginx Web 服务器:
示例输出:
$ cd /tmp
$ wget http://nginx.org/packages/rhel/6/noarch/RPMS/nginx-release-rhel-6-0.el6.ngx.noarch.rpm
# rpm -iv nginx-release-rhel-6-0.el6.ngx.noarch.rpm
# yum install nginx
Loaded plugins: rhnplugin Setting up Install Process Resolving Dependencies --> Running transaction check ---> Package nginx.x86_64 0:1.2.1-1.el6.ngx will be installed --> Finished Dependency Resolution Dependencies Resolved ========================================================================= Package Arch Version Repository Size ========================================================================= Installing: nginx x86_64 1.2.1-1.el6.ngx nginx 331 k Transaction Summary ========================================================================= Install 1 Package(s) Total download size: 331 k Installed size: 730 k Is this ok [y/N]: y Downloading Packages: nginx-1.2.1-1.el6.ngx.x86_64.rpm | 331 kB 00:00 Running rpm_check_debug Running Transaction Test Transaction Test Succeeded Running Transaction Warning: RPMDB altered outside of yum. Installing : nginx-1.2.1-1.el6.ngx.x86_64 1/1 ---------------------------------------------------------------------- Thanks for using NGINX! Check out our community web site: * http://nginx.org/en/support.html If you have questions about commercial support for NGINX please visit: * http://www.nginx.com/support.html ---------------------------------------------------------------------- Verifying : nginx-1.2.1-1.el6.ngx.x86_64 1/1 Installed: nginx.x86_64 0:1.2.1-1.el6.ngx Complete!
将 nginx Web 服务器配置为反向代理
编辑/etc/nginx/conf.d/default.conf,输入:
# vi /etc/nginx/conf.d/default.conf
添加/修改如下:
## Basic reverse proxy server ## ## Apache (vm02) backend for www.example.com ## upstream apachephp { server 192.168.1.11:80; #Apache1 } ## Lighttpd (vm01) backend for static.example.com ## upstream lighttpd { server 192.168.1.10:80; #Lighttpd1 } ## Start www.example.com ## server { listen 202.54.1.1:80; server_name www.example.com; access_log /var/log/nginx/log/www.example.access.log main; error_log /var/log/nginx/log/www.example.error.log; root /usr/share/nginx/html; index index.html index.htm; ## send request back to apache1 ## location / { proxy_pass http://apachephp; proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504; proxy_redirect off; proxy_buffering off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } ## End www.example.com ## ## START static.example.com ## server { listen 202.54.1.1:80; server_name static.example.com; access_log /var/log/nginx/log/static.example.com.access.log main; error_log /var/log/nginx/log/static.example.com.error.log; root /usr/local/nginx/html; index index.html; location / { proxy_pass http://lighttpd; proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504; proxy_redirect off; proxy_buffering off; proxy_set_header Host static.example.com; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } ## END static.example.com ##
打开 Nginx
键入以下命令:
# chkconfig nginx on
# service nginx start
配置防火墙
防火墙设置如下:
- 默认丢弃所有 INPUT/OUTPUT 链流量。
- 仅在 eth0 上打开 tcp 端口 202.54.1.1:80 和/或 443。
- 将 eth1 设置为受信任的设备,以便 nginx 反向代理和 Apache/Lighttpd 后端服务器之间进行通信。
运行以下命令来设置和自定义防火墙,如上所述:
# system-config-firewall-tui
您可以手动编辑 /etc/sysconfig/iptables 并设置防火墙。有关更多信息,请参阅我们的教程。
/etc/sysctl.conf
编辑 /etc/sysctl.conf 如下:
# Execshild kernel.exec-shield = 1 kernel.randomize_va_space = 1 # IPv4 settings net.ipv4.ip_forward = 0 net.ipv4.conf.all.send_redirects = 0 net.ipv4.conf.default.send_redirects = 0 net.ipv4.conf.all.accept_source_route = 0 net.ipv4.conf.all.accept_redirects = 0 net.ipv4.conf.all.secure_redirects = 0 net.ipv4.conf.all.log_martians = 1 net.ipv4.conf.default.accept_source_route = 0 net.ipv4.conf.default.accept_redirects = 0 net.ipv4.conf.default.secure_redirects = 0 net.ipv4.icmp_echo_ignore_broadcasts = 1 net.ipv4.tcp_syncookies = 1 net.ipv4.conf.all.rp_filter = 1 net.ipv4.conf.default.rp_filter = 1 # Increase system file descriptor limit to fs.file-max = 50000 # Increase system IP port limits net.ipv4.ip_local_port_range = 2000 65000 # Ipv6 net.ipv6.conf.default.router_solicitations = 0 net.ipv6.conf.default.accept_ra_rtr_pref = 0 net.ipv6.conf.default.accept_ra_pinfo = 0 net.ipv6.conf.default.accept_ra_defrtr = 0 net.ipv6.conf.default.autoconf = 0 net.ipv6.conf.default.dad_transmits = 0 net.ipv6.conf.default.max_addresses = 1
加载新的 Linux 内核设置,运行:有关上述指令的详细说明,
# sysctl -p
请参阅Linux 内核 /etc/sysctl.conf 安全强化常见问题解答。
保护 Nginx Web 服务器
有关详细信息,请参阅我们之前的博客文章“ 20 大 Nginx WebServer 最佳安全实践”。此外,有关 nginx、反向代理和 SSL 配置的更多信息,请参阅我们之前的教程:
LAMP Stack 安全最佳实践
- 加密数据通信 – 配置 vms 时使用 ssh 和 vpns。使用 scp/sftp 客户端上传文件。
- 您真的需要安装所有类型的 Web 服务吗?避免安装不必要的软件,以避免软件漏洞。使用 RPM 包管理器(例如 yum 或 apt-get 和/或 dpkg)查看所有已安装的应用程序。
- 应用安全补丁是维护 Linux 服务器的重要部分。Linux 提供所有必要的工具来保持系统更新,并且还允许在版本之间轻松升级。应尽快检查并应用所有安全更新。
- 为用户帐户和软件提供执行任务所需的最小权限。不要向所有人提供 ssh 访问权限。
- 阅读我们其余的安全提示和最佳实践:
结论:
我希望本指南为您提供足够的信息,以便您配置和使用 vm 为基于 CentOS 和 RHEL 的操作系统提供一个网络服务。