前面一篇文章介绍了如何在 centos中安装nginx,

centos 安装 nginx

这一篇主要记录一下nginx的一些配置及使用。

由于公司重要开发的都是webService后台,所以nginx在这里的使用,主要是代理转发和负载均衡,说白了,就是这些webService服务都是部署在线上内网环境,外网无法直连,那么就会在那些外网能直连的机器上安装nginx,用它来代理转发,并且如果后面webService是集群部署的话,也做一些负载均衡的操作。

这里画一个图来描述一下这个过程,实际上调用者实际连接的是那些安装了nginx的机器,并不是他背后那些实际的服务器。nginx在这里作为代理转发和负载均衡的助手。具体如图:

nginx2

我们的线上机器有一小部分有外网访问地址,剩下一大部分机器外网是无法访问的,所以nginx就部署在这一小部分的有外网访问的机器上,然后通过nginx的配置,反向代理和负载均衡到我们内网实际的服务器上。这样对于客户端调用者来说,就好像是nginx那台机器给他们提供服务一样,这就是反向代理。

反向代理和正向代理的主要区别是:

正向代理:就是模拟用户访问,代理服务器代理的是用户,对于网站服务器来说,感觉是代理服务器在访问自己一样,这就是正向代理。

反向代理:则相反,是代理服务器,对于用户来说,屏蔽了具体的服务器的信息,对用户来说,他访问的是一个代理机器,比如这里面的nginx,这就是反向代理,主要区别就是代理的内容不一样。

下面来说一下具体的配置吧,其实对于目前公司线上的情况,配置其实挺简单的,只有反向代理和负载均衡两个步骤,对于配置来说,只需要完成两个步骤即可。nginx的安装如上一篇文章介绍的一样,具体步骤如下:

(1) 在nginx的主目录中/etc/nginx/nginx.conf 中,在http标签中添加一个upstream,如下所示:


user nginx;
worker_processes 1;

error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;

events {
 worker_connections 1024;
}

http {
 include /etc/nginx/mime.types;
 default_type application/octet-stream;

upstream nginxdemo {
 server 192.168.15.20:8102 weight=1 max_fails=1 fail_timeout=100;
 server 192.168.15.21:8102 weight=1 max_fails=1 fail_timeout=100;
 server 192.168.15.22:8102 weight=1 max_fails=1 fail_timeout=100;
 server 192.168.15.23:8102 weight=1 max_fails=1 fail_timeout=100;
 }
 log_format main '$remote_addr - $remote_user [$time_local] "$request" '
 '$status $body_bytes_sent "$http_referer" '
 '"$http_user_agent" "$http_x_forwarded_for"';

access_log /var/log/nginx/access.log main;

sendfile on;
 #tcp_nopush on;

keepalive_timeout 65;

#gzip on;

include /etc/nginx/conf.d/*.conf;
}

这里面新添加了一个nginxdemo的upstream,里面负载均衡了四个后台服务,分别是

192.168.15.20:8102  192.168.15.21:8102  192.168.15.22:8102  192.168.15.23:8102

这四个基本的轮询。

注意看上面配置里面最后一行,include  /etc/nginx/conf.d/*.conf,它会主动加载conf.d目录下所以以conf结尾的子配置文件。所以第二步就是在conf.d目录下新建一个子配置。

(2)在/etc/nginx/conf.d/ 新建一个test.conf的文件,内容如下:


server {
 listen 20080;
 server_name localhost;

location /testurl{
 proxy_set_header Host $host:$server_port;
 proxy_set_header X-Real-IP $remote_addr;
 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
 proxy_connect_timeout 10;
 proxy_read_timeout 60;
 proxy_send_timeout 60;
 proxy_pass http://nginxdemo;

}

error_page 500 502 503 504 /50x.html;
 location = /50x.html {
 root /usr/share/nginx/html;
 }

}

如上图所示,首先需要定义一下这个服务需要监听的端口,这里定义的是20080端口,然后需要定义location为testurl,这里表示的是,如果用户访问的是  nginx这台机器的20080端口,并且访问的路径是以testurl开头的,则通过这个 配置,让用户的请求代理转发到刚才配置nginxdemo的upstream上,就可以四台机器负载均衡了。

例如用户的访问连接如下,http://nginx机器的外网ip:20080/testurl/xxx,用户使用这种连接访问就能达到 负载均衡的效果。

特别提醒,注意这三行一定要加上

 proxy_set_header Host $host:$server_port;
 proxy_set_header X-Real-IP $remote_addr;
 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

因为公司主要后台的服务都是xfire或者cxf开发的webService,在配置nginx的时候,必须加上上面标红的这三行代理配置,否则映射出来的 webService地址不对,无法使用。

(3)不是说这有两步吗,这个第三步是什么,嘿嘿,其实第三步就是让配置生效,首先需要在防火墙开放20080端口,然后执行   nginx -s reload  即可。至于防火墙的相关操作,请参考后面的文章centos防火墙的相关设置

 

linux 配置http代理以及epel源安装

在线上部署环境,安装软件时,经常碰到的一种情况就是使用yum来安装软件,但是有时无法访问外网,这时就需要正向代理的支持了。说到代理服务器,有正向代理,...

阅读全文

记录一次线上mysql主从数据库的迁移(数据量为亿级别)

前一阵迁移了线上服务器上的mysql的数据,数据量达到了亿级别。特在此记录一下操作流程。 现状: 目前线上使用了mysql主从库,即主库A和从库B,由于当初在安...

阅读全文

centos6下 mysql 5.5 数据目录迁移

前一篇文章 http://www.xiaomager.com/651.html 介绍了centos6下 mysql 5.5的安装过程。 当启动后,可以使用命令 ps -ef|grep mysql 看来mysql的进程情况,如...

阅读全文

欢迎留言