Nginx概述及安装配置
1、概述
Nginx是一款开源的,高性能的Http和反向代理服务器,同时也是一个IMAP、POP3、SMTP代理服务器;Nginx可以作为一个HTTP服务器进行网站的发布处理,也可以作为反向代理进行负载均衡的实现。
2、反向代理和正向代理
所谓代理其实可以理解为一个代表或者一个渠道,如房产中介,他被代理的角色就是各类房主,目标角色就是购房者或租房者,当有购房者前来访问时,他就根据购房者的需求指定某一套房。
与之对应的就是正向代理,正向代理最大的特点就是客户端非常明确要访问的服务器地址,而服务器只清楚请求来自于哪个代理服务器,而不清楚哪个具体的客户端,例如:我们要访问某个国外的网站,通过浏览器是无妨访问的,我们必须通过某个代理服务器,将请求发送给代理服务器,代理服务器去访问国外的网站然后将访问到数据传递给我们。
反向代理举例
例如某东网站,每天同时访问的人数爆满,单个服务器就不能满足日益增长的人数,此时就出现了分布式部署,通过多台服务器解决访问人数到达极限的问题,这一问题大多数网站就使用Nginx进行反向代理实现,也就是分布式集群操作。
当有多个客户端给服务器发送请求时,nginx服务器在接收到请求之后,按照一定的规则分发给后端的业务处理服务器进行处理,此时请求的来源也就是客户端是明确的,但请求具体是哪台服务器处理就是不明确了,nginx扮演的是一个反向代理的角色。
所以反向代理主要用于服务器集群式分布式部署,对外隐藏了服务器的信息。
问:一台服务器可以配置两个Nginx?
理论上是可以的,通过安装不同的nginx到不同的位置
并且两个nginx的配置文件中设置的监听端口不能冲突
可以同时开启多个nginx
但不建议这样做,一般是通过server指令添加多个虚拟主机,而不是启动多个nginx
3、负载均衡
Nginx扮演了反向代理服务器的角色,它是根据什么样的规则进行请求分发的?不同的应用场景,分发的规则是否可以控制?
我们把客户端发送的、nginx反向代理服务器接收到的请求数量称为负载量
请求数量按照一定的规则进行分发到不同的服务器处理规则称为均衡规则
所以将服务器接收到的请求按照规则分发的过程称为负载均衡。
场景就类似于当一台服务器满了,网站越来越慢,可以将相同的应用部署在多台服务器上,将大量的用户分配给多台机器处理,带来的好处是只要有一台服务器宕机了,其他服务器还正常能运行,不会影响用户的使用。
负载均衡的配置:
upstream myapp { server 192.168.0.111:8080; # 应用服务器1 server 192.168.0.112:8080; # 应用服务器2 } server { listen 80; location / { proxy_pass http://myweb; } }
负载均衡-----硬件负载(价格昂贵成本高,但数据安全性有很好的保障)
-----软件负载(利用现有的技术结合主机硬件实现的一种消息队列分发机制)
Nginx支持的负载均衡的调度方式:
1、weight轮询(默认):接收到的请求按照顺序逐一分配到不同的后端服务器,即使在使用过程中,某一台后端服务器宕机,nginx会自动将该服务器剔除出队列,请求受理情况不会受到任何影响。 这种方式下,可以给不同的后端服务器设置一个权重值(weight),用于调整不同的服务器上请求的分配率;权重数据越大,被分配到请求的几率越大;该权重值,主要是针对实际工作环境中不同的后端服务器硬件配置进行调整的。
2、ip_hash:每个请求按照发起客户端的ip的hash结果进行匹配,这样的算法下一个固定ip地址的客户端总会访问到同一个后端服务器,这也在一定程度上解决了集群部署环境下session共享的问题。
3、fair:智能调整调度算法,动态的根据后端服务器的请求处理到响应的时间进行均衡分配,响应时间短处理效率高的服务器分配到请求的概率高,响应时间长处理效率低的服务器分配到的请求少;结合了前两者的优点的一种调度算法。但是需要注意的是nginx默认不支持fair算法,如果要使用这种调度算法,请安装upstream_fair模块。
4、url_hash:按照访问的url的hash结果分配请求,每个请求的url会指向后端固定的某个服务器,可以在nginx作为静态服务器的情况下提高缓存效率。同样要注意nginx默认不支持这种调度算法,要使用的话需要安装nginx的hash软件包。
4、虚拟主机
场景:比如有这样的网站,访问量比较小,为了节约成本,将多个网站部署在同一台服务器上,用户去访问的时候域名解析的是同一个IP。但用户却能正确的打开不同的网站,互不影响,就像访问两台服务器一样,这种情况叫两个虚拟主机
配置如下:
server { listen 80 default_server; server_name _; return 444; # 过滤其他域名的请求,返回444状态码 } server { listen 80; server_name www.aaa.com; # www.aaa.com域名 location / { proxy_pass http://localhost:8080; # 对应端口号8080 } } server { listen 80; server_name www.bbb.com; # www.bbb.com域名 location / { proxy_pass http://localhost:8081; # 对应端口号8081 } }
在服务器8080和8081分别开了一个应用,客户端通过不同的域名访问,根据server_name可以反向代理到对应的应用服务器。
虚拟主机的原理是通过HTTP请求头中的Host是否匹配server_name来实现的.
5、Nginx的安装配置
系统平台:CentOS release 6.6 (Final) 64位。
5.1、安装编译工具及库文件
yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel
5.2、首先要安装 PCRE
PCRE 作用是让 Nginx 支持 Rewrite 功能。
1、下载 PCRE 安装包,下载地址: http://downloads.sourceforge.net/project/pcre/pcre/8.35/pcre-8.35.tar.gz
[root@bogon src]# wget http://downloads.sourceforge.net/project/pcre/pcre/8.35/pcre-8.35.tar.gz
2、解压安装包
[root@bogon src]# tar zxvf pcre-8.35.tar.gz
3、进入安装包目录
[root@bogon src]# cd pcre-8.35
4、编译安装
[root@bogon pcre-8.35]# ./configure [root@bogon pcre-8.35]# make && make install
5、查看pcre版本
[root@bogon pcre-8.35]# pcre-config --version
5.2、安装 Nginx
1、下载 Nginx,下载地址:http://nginx.org/download/nginx-1.6.2.tar.gz
[root@bogon src]# wget http://nginx.org/download/nginx-1.6.2.tar.gz
2、解压安装包
[root@bogon src]# tar zxvf nginx-1.6.2.tar.gz
3、进入安装包目录
[root@bogon src]# cd nginx-1.6.2
4、编译安装
[root@bogon nginx-1.6.2]# ./configure --prefix=/usr/local/webserver/nginx --with-http_stub_status_module --with-http_ssl_module --with-pcre=/usr/local/src/pcre-8.35 [root@bogon nginx-1.6.2]# make [root@bogon nginx-1.6.2]# make install
5、查看nginx版本
[root@bogon nginx-1.6.2]# /usr/local/webserver/nginx/sbin/nginx -v
到此,nginx安装完成。
5.3、Nginx 配置
创建 Nginx 运行使用的用户 www:
[root@bogon conf]# /usr/sbin/groupadd www [root@bogon conf]# /usr/sbin/useradd -g www www
配置nginx.conf ,将/usr/local/webserver/nginx/conf/nginx.conf替换为以下内容
[root@bogon conf]# cat /usr/local/webserver/nginx/conf/nginx.conf user www www; worker_processes 2; #设置值和CPU核心数一致 error_log /usr/local/webserver/nginx/logs/nginx_error.log crit; #日志位置和日志级别 pid /usr/local/webserver/nginx/nginx.pid; #Specifies the value for maximum file descriptors that can be opened by this process. worker_rlimit_nofile 65535; events { use epoll; worker_connections 65535; } http { include mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" $http_x_forwarded_for'; #charset gb2312; server_names_hash_bucket_size 128; client_header_buffer_size 32k; large_client_header_buffers 4 32k; client_max_body_size 8m; sendfile on; tcp_nopush on; keepalive_timeout 60; tcp_nodelay on; fastcgi_connect_timeout 300; fastcgi_send_timeout 300; fastcgi_read_timeout 300; fastcgi_buffer_size 64k; fastcgi_buffers 4 64k; fastcgi_busy_buffers_size 128k; fastcgi_temp_file_write_size 128k; gzip on; gzip_min_length 1k; gzip_buffers 4 16k; gzip_http_version 1.0; gzip_comp_level 2; gzip_types text/plain application/x-javascript text/css application/xml; gzip_vary on; #limit_zone crawler $binary_remote_addr 10m; #下面是server虚拟主机的配置 server { listen 80;#监听端口 server_name localhost;#域名 index index.html index.htm index.php; root /usr/local/webserver/nginx/html;#站点目录 location ~ .*\.(php|php5)?$ { #fastcgi_pass unix:/tmp/php-cgi.sock; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include fastcgi.conf; } location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|ico)$ { expires 30d; # access_log off; } location ~ .*\.(js|css)?$ { expires 15d; # access_log off; } access_log off; } }
检查配置文件ngnix.conf的正确性命令:
[root@bogon conf]# /usr/local/webserver/nginx/sbin/nginx -t
5.4、启动 Nginx
Nginx 启动命令如下:
[root@bogon conf]# /usr/local/webserver/nginx/sbin/nginx
访问站点
从浏览器访问我们配置的站点ip:
Nginx 其他命令
以下包含了 Nginx 常用的几个命令:
/usr/local/webserver/nginx/sbin/nginx -s reload # 重新载入配置文件 /usr/local/webserver/nginx/sbin/nginx -s reopen # 重启 Nginx /usr/local/webserver/nginx/sbin/nginx -s stop # 停止 Nginx
上一篇: 小刘同学的第八十四篇博文
下一篇: CentOS7.2下Nginx的使用