为啥使用nginxnginx如何做反向代理理

nginx 反向代理 取得真实IP和域名 - huangqiqing123 - ITeye博客
博客分类:
nginx反向代理后,在应用中取得的ip都是反向代理服务器的ip,取得的域名也是反向代理配置的url的域名,解决该问题,需要在nginx反向代理配置中添加一些配置信息,目的将客户端的真实ip和域名传递到应用程序中。
nginx反向代理配置时,一般会添加下面的配置:
proxy_set_header Host $
proxy_set_header X-Real-IP $remote_
proxy_set_header REMOTE-HOST $remote_
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_
其中第一行关于host的配置,是关于域名传递的配置,余下跟IP相关。
php中取得客户端真实IP:
* 获取客户端ip
function getClientIP() {
$ip = "unknown";
* 访问时用localhost访问的,读出来的是“::1”是正常情况。
* ::1说明开启了ipv6支持,这是ipv6下的本地回环地址的表示。
* 使用ip地址访问或者关闭ipv6支持都可以不显示这个。
if (isset($_SERVER)) {
if (isset($_SERVER["HTTP_X_FORWARDED_FOR"])) {
$ip = $_SERVER["HTTP_X_FORWARDED_FOR"];
} elseif (isset($_SERVER["HTTP_CLIENT_ip"])) {
$ip = $_SERVER["HTTP_CLIENT_ip"];
$ip = $_SERVER["REMOTE_ADDR"];
if (getenv('HTTP_X_FORWARDED_FOR')) {
$ip = getenv('HTTP_X_FORWARDED_FOR');
} elseif (getenv('HTTP_CLIENT_ip')) {
$ip = getenv('HTTP_CLIENT_ip');
$ip = getenv('REMOTE_ADDR');
if(trim($ip)=="::1"){
$ip="127.0.0.1";
java取得客户端真实IP:
public String getClientIP(HttpServletRequest request) {
String ip = request.getHeader("x-forwarded-for");
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("Proxy-Client-IP");
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP");
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
php取得域名:
$_SERVER['SERVER_NAME'];
java取得域名:
request.getServerName()
浏览 26812
huangqiqing123
浏览: 903299 次
来自: 济南
博主这个中文版的在哪找到的?
curl请求后没有响应是什么问题呢,QQ
你好,我想我想问一下,你的二维码生成字节数组怎么做到的 Zxi ...
xiaolei1004 写道int ind = doc.add ...
int ind = doc.addPicture(byteIn ...大家好,我想请问下,ngix做反向代理后,这个内容流量具体是怎么返回给用户的?
要评论问题请先或
- Shell 版主
要参与问题请先或
- 我是码农我自豪
要参与问题请先或
- Do all in command line
要参与问题请先或
要参与问题请先或
浏览: 4056
关注: 4 人使用Nginx实现负载平衡和反向代理 -解道Jdon
& & & &&& & &
  Nginx是开放的高性能的Web服务器。它能够处理大量的并发客户端连接(见)。虽然Nginx和Apache HTTP都是能够处理大量的请求,但是,Nginx可以在没有严重的性能退化和内存使用量增加的情况下达到这一目标(nginx的依赖于一个非阻塞I/O,,而在Apache是线程堵塞/O)。
  这使得nginx适合担任优良的负载平衡器和反向代理服务器,可以将传入的并发客户端的连接,分配到不同上游服务器上继续处理客户端请求。客户端的请求的可能是一个单一的服务或应用程序(负载平衡),或是各种不同的服务和应用,运行在一个内部网络中(反向代理)。
  Niginx接受客户端请求,分发到两个上游服务器10.0.0.1和10.0.0.2的配置如下:
upstream rails_application
server 10.0.0.1 max_fails=1 fail_timeout=10s;
server 10.0.0.2 max_fails=1 fail_timeout=10s;
# and so on: server 10.0.0.x;}&server {
listen 1.2.3.4:80;
location / {
proxy_pass
http://rails_
  Nginx的负载平衡就配置完成了。
  nginx 的 upstream目前支持 4 种方式的分配
轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
url_hash(第三方)
具体如下,定义负载均衡设备的 Ip及设备状态&:
upstream myServer {&&&
&&& server 127.0.0.1:9090&
&&& server 127.0.0.1:8080 weight=2;&
&&& server 127.0.0.1:6060;&
&&& server 127.0.0.1:7070&
down 表示单前的server暂时不参与负载&
weight& 默认为1.weight越大,负载的权重就越大。&
max_fails :允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误&
fail_timeout:max_fails 次失败后,暂停的时间。&
backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。
  注意,上述负载均衡配置是没有考虑Session状态共享,要求你的应用程序是无态服务,如果要完成注册登录一些必须Session stick的功能,可考虑使用ip_hash,有限制条件,nginx必须位于最前端,对于一个架构设计上是读写分离的系统,这是可行的:
upstream backend {
& server 127.0.0.1:8080 ;
& server 127.0.0.1:9090 ;
| 网站地图 | 设为首页

我要回帖

更多关于 使用nginx反向代理 的文章

 

随机推荐