`

nginx的配置、虚拟主机、负载均衡和反向代理

 
阅读更多

nginx.conf配置文件详解

其实,对比,apache的配置文件,它的相对比较清晰和简单,之前觉得很难,现在沉下心来想想,其实很简单。大致的分块下,基本就分为以下几块:

 
  1. main
  2. events {
  3. ....
  4. }
  5. http {
  6. ....
  7. upstream myproject {
  8. .....
  9. }
  10. server {
  11. ....
  12. location {
  13. ....
  14. }
  15. }
  16. server {
  17. ....
  18. location {
  19. ....
  20. }
  21. }
  22. ....
  23. }

nginx配置文件主要分为六个区域: 
main(全局设置)events(nginx工作模式)http(http设置)、 
sever(主机设置)location(URL匹配)upstream(负载均衡服务器设置)

 

main模块

下面时一个main区域,他是一个全局的设置:

 
  1. user nobody nobody;
  2. worker_processes 2;
  3. error_log /usr/local/var/log/nginx/error.log notice;
  4. pid /usr/local/var/run/nginx/nginx.pid;
  5. worker_rlimit_nofile 1024;

user 来指定Nginx Worker进程运行用户以及用户组,默认由nobody账号运行。

worker_processes来指定了Nginx要开启的子进程数。每个Nginx进程平均耗费10M~12M内存。根据经验,一般指定1个进程就足够了,如果是多核CPU,建议指定和CPU的数量一样的进程数即可。我这里写2,那么就会开启2个子进程,总共3个进程。

error_log用来定义全局错误日志文件。日志输出级别有debug、info、notice、warn、error、crit可供选择,其中,debug输出日志最为最详细,而crit输出日志最少。 

pid用来指定进程id的存储文件位置。

worker_rlimit_nofile用于指定一个nginx进程可以打开的最多文件描述符数目,这里是65535,需要使用命令“ulimit -n 65535”来设置。

 

events 模块

events模块来用指定nginx的工作模式和工作模式及连接数上限,一般是这样:

 
  1. events {
  2. use kqueue;#mac平台
  3. worker_connections 1024;
  4. }

use用来指定Nginx的工作模式。Nginx支持的工作模式有select、poll、kqueue、epoll、rtsig和/dev/poll。其中select和poll都是标准的工作模式,kqueue和epoll是高效的工作模式,不同的是epoll用在Linux平台上,而kqueue用在BSD系统中,因为Mac基于BSD,所以Mac也得用这个模式,对于Linux系统,epoll工作模式是首选。

worker_connections用于定义Nginx每个进程的最大连接数,即接收前端的最大请求数,默认是1024。最大客户端连接数由worker_processesworker_connections决定,即Max_clients=worker_processes*worker_connections,在作为反向代理时,Max_clients变为:Max_clients = worker_processes * worker_connections/4。 
进程的最大连接数受Linux系统进程的最大打开文件数限制,在执行操作系统命令“ulimit -n 65536”后worker_connections的设置才能生效。

 

http 模块

http模块可以说是最核心的模块了,它负责HTTP服务器相关属性的配置,它里面的server和upstream子模块,至关重要,等到反向代理和负载均衡以及虚拟目录等会仔细说。

 
  1. http{
  2. include mime.types;
  3. default_type application/octet-stream;
  4. log_format main '$remote_addr - $remote_user [$time_local] "$request" '
  5. '$status $body_bytes_sent "$http_referer" '
  6. '"$http_user_agent" "$http_x_forwarded_for"';
  7. access_log /usr/local/var/log/nginx/access.log main;
  8. sendfile on;
  9. tcp_nopush on;
  10. tcp_nodelay on;
  11. keepalive_timeout 10;
  12. #gzip on;
  13. upstream myproject {
  14. .....
  15. }
  16. server {
  17. ....
  18. }
  19. }

下面详细介绍下这段代码中每个配置选项的含义。 
include 用来设定文件的mime类型,类型在配置文件目录下的mime.type文件定义,来告诉nginx来识别文件类型。

default_type设定了默认的类型为二进制流,也就是当文件类型未定义时使用这种方式,例如在没有配置asp 的locate 环境时,Nginx是不予解析的,此时,用浏览器访问asp文件就会出现下载了。

log_format用于设置日志的格式,和记录哪些参数,这里设置为main,刚好用于access_log来记录这种类型。

main的类型日志如下:也可以增删部分参数。

127.0.0.1 - - [21/Apr/2015:18:09:54 +0800] "GET /index.php HTTP/1.1" 200 87151 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.76 Safari/537.36"

access_log 用来纪录每次的访问日志的文件地址,后面的main是日志的格式样式,对应于log_formatmain

sendfile参数用于开启高效文件传输模式。将tcp_nopush和tcp_nodelay两个指令设置为on用于防止网络阻塞。

keepalive_timeout设置客户端连接保持活动的超时时间。在超过这个时间之后,服务器会关闭该连接。

还有很多各种配置,以后等用到来再说。

 

server 模块

sever 模块是http的子模块,它用来定一个虚拟主机,我们先讲最基本的配置,这些在后面再讲。

我们看一下一个简单的server 是如何做的?

 
  1. server {
  2. listen 8080;
  3. server_name localhost 192.168.12.10 www.yangyi.com;
  4. # 全局定义,如果都是这一个目录,这样定义最简单。
  5. root /Users/yangyi/www;
  6. index index.php index.html index.htm;
  7. charset utf-8;
  8. access_log usr/local/var/log/host.access.log main;
  9. aerror_log usr/local/var/log/host.error.log error;
  10. ....
  11. }

server标志定义虚拟主机开始。 
listen用于指定虚拟主机的服务端口。 
server_name用来指定IP地址或者域名,多个域名之间用空格分开。 
root 表示在这整个server虚拟主机内,全部的root web根目录。注意要和locate {}下面定义的区分开来。 
index 全局定义访问的默认首页地址。注意要和locate {}下面定义的区分开来。 
charset用于设置网页的默认编码格式。 
access_log用来指定此虚拟主机的访问日志存放路径,最后的main用于指定访问日志的输出格式。

 

location 模块

location模块是nginx中用的最多的,也是最重要的模块了,什么负载均衡啊、反向代理啊、虚拟域名啊都与它相关。慢慢来讲:

location 根据它字面意思就知道是来定位的,定位URL,解析URL,所以,它也提供了强大的正则匹配功能,也支持条件判断匹配,用户可以通过location指令实现Nginx对动、静态网页进行过滤处理。像我们的php环境搭建就是用到了它。

我们先来看这个,设定默认首页和虚拟机目录。

 
  1. location /{
  2. root /Users/yangyi/www;
  3. index index.php index.html index.htm;
  4. }

location /表示匹配访问根目录。

root指令用于指定访问根目录时,虚拟主机的web目录,这个目录可以是相对路径(相对路径是相对于nginx的安装目录)。也可以是绝对路径。

index用于设定我们只输入域名后访问的默认首页地址,有个先后顺序:index.php index.html index.htm,如果没有开启目录浏览权限,又找不到这些默认首页,就会报403错误。

location 还有一种方式就是正则匹配,开启正则匹配这样:location ~。后面加个~

下面这个例子是运用正则匹配来链接php。我们之前搭建环境也是这样做:

 
  1. location ~ \.php$ {
  2. root /Users/yangyi/www;
  3. fastcgi_pass 127.0.0.1:9000;
  4. fastcgi_index index.php;
  5. include fastcgi.conf;
  6. }

\.php$ 熟悉正则的我们直到,这是匹配.php结尾的URL,用来解析php文件。里面的root也是一样,用来表示虚拟主机的根目录。 
fast_pass链接的是php-fpm 的地址,之前我们也搭建过。其他几个参数我们以后再说。

location 还有其他用法,等讲到实例的时候,再看吧。

 

upstream 模块

upstream 模块负债负载均衡模块,通过一个简单的调度算法来实现客户端IP到后端服务器的负载均衡。我先学习怎么用,具体的使用实例以后再说。

 
  1. upstream iyangyi.com{
  2. ip_hash;
  3. server 192.168.12.1:80;
  4. server 192.168.12.2:80 down;
  5. server 192.168.12.3:8080 max_fails=3 fail_timeout=20s;
  6. server 192.168.12.4:8080;
  7. }

在上面的例子中,通过upstream指令指定了一个负载均衡器的名称iyangyi.com。这个名称可以任意指定,在后面需要的地方直接调用即可。

里面是ip_hash这是其中的一种负载均衡调度算法,下面会着重介绍。紧接着就是各种服务器了。用server关键字表识,后面接ip。

Nginx的负载均衡模块目前支持4种调度算法:

  1. weight 轮询(默认)。每个请求按时间顺序逐一分配到不同的后端服务器,如果后端某台服务器宕机,故障系统被自动剔除,使用户访问不受影响。weight。指定轮询权值,weight值越大,分配到的访问机率越高,主要用于后端每个服务器性能不均的情况下。
  2. ip_hash。每个请求按访问IP的hash结果分配,这样来自同一个IP的访客固定访问一个后端服务器,有效解决了动态网页存在的session共享问题。
  3. fair。比上面两个更加智能的负载均衡算法。此种算法可以依据页面大小和加载时间长短智能地进行负载均衡,也就是根据后端服务器的响应时间来分配请求,响应时间短的优先分配。Nginx本身是不支持fair的,如果需要使用这种调度算法,必须下载Nginx的upstream_fair模块。
  4. url_hash。按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,可以进一步提高后端缓存服务器的效率。Nginx本身是不支持url_hash的,如果需要使用这种调度算法,必须安装Nginx 的hash软件包。

在HTTP Upstream模块中,可以通过server指令指定后端服务器的IP地址和端口,同时还可以设定每个后端服务器在负载均衡调度中的状态。常用的状态有:

  • down,表示当前的server暂时不参与负载均衡。
  • backup,预留的备份机器。当其他所有的非backup机器出现故障或者忙的时候,才会请求backup机器,因此这台机器的压力最轻。
  • max_fails,允许请求失败的次数,默认为1。当超过最大次数时,返回proxy_next_upstream 模块定义的错误。
  • fail_timeout,在经历了max_fails次失败后,暂停服务的时间。max_fails可以和fail_timeout一起使用。

注意 当负载调度算法为ip_hash时,后端服务器在负载均衡调度中的状态不能是weight和backup。

参考文件: 
http://blog.csdn.net/xifeijian/article/details/20956605 
http://www.360doc.com/content/13/1114/12/7694408_329125489.shtml 
http://www.cnblogs.com/xiaogangqq123/archive/2011/03/02/1969006.html 
http://ixdba.blog.51cto.com/2895551/790611 
http://freeloda.blog.51cto.com/2033581/1288553

分享到:
评论

相关推荐

    浅谈Nginx七层反向代理和负载均衡

    1.1 Nginx不仅是一个出色的web软件,其七层代理和负载均衡也是相当出色。Nginx做前端代理,当用户请求服务时,可以根据url进行判断,然后分配到不同的后台webserver上。 1.2 Nginx的负载均衡实现原理:首先在http...

    架构师培训教程 大数据高并发服务器实战 第2.6篇-Nginx部分-反向代理和负载均衡-负载均衡配置 共9页.pptx

    第2.6篇-Nginx部分-反向代理和负载均衡-负载均衡配置 共9页 第2.7篇-Nginx部分-Rewrite功能 共29页 第2.8篇-Nginx部分-Nginx工作原理 共15页 第2.9篇-Nginx部分-与Tomcat整合配置 共14页 第3篇-Memcached缓存篇 共30...

    nginx负载均衡 nginx+tomcat tomcat实现负责均衡

    Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器... Nginx 支持简单的负载均衡和容错; 支持作为基本 HTTP 服务器的功能,例如日志、压缩、Byte ranges、Chunked responses、SSL、虚拟主机等等,应有尽有

    nginx搭建配置详细说明

    5.3. 规划虚拟主机的配置文件 6. 动静分离 7. nginx的反向代理 7.1. 什么是反向代理 7.2. 明确两个概念 7.3. 特点 7.4. 反向代理的配置 7.5. 可以将代理配置单独放在一个配置文件中 8. nginx的负载均衡(自学...

    Nginx反向代理服务器

    Nginx作为负载均衡服务器:Nginx 既可以在内部直接支持 Rails 和 PHP 程序对外进行服务,也可以支持作为 HTTP代理服务器对外进行服务。Nginx采用C进行编写,不论是系统资源开销还是CPU使用效率都比 Perlbal 要好很多...

    Linux 系统 nginx 服务器安装及负载均衡配置详解

    nginx(engine x) 是一个 高性能 的 HTTP 和 反向代理 服务器、邮件代理服务器以及通用的 TCP/UDP 代理服务器。...此外,nginx 还可以用于代理、反向代理、负载均衡、缓存等服务器功能,在集群环境中改善网络负载

    Linux 按照部署 Nginx 服务器 及相关依赖 - Nginx 配置讲解

    5. 反向代理和负载均衡:通过配置反向代理,可以将客户端的请求转发给后端的应用服务器。负载均衡则可以均匀地将请求分配给多个后端服务器。 6. URL重写和重定向:使用rewrite指令可以修改URL,实现URL重写或重定向...

    nginx for windows下载以及详细安装与配置

    nginx for windows下载以及详细安装与配置 ...3.Nginx 支持简单的负载均衡和容错 4.支持作为基本 HTTP 服务器的功能,例如日志、压缩、Byte ranges、Chunked responses、SSL、虚拟主机等等,应有尽有

    nginx视频教程.txt

    P1414_Nginx视频教程_Nginx负载均衡备份和宕机 P1515_Nginx视频教程_什么是动静分离? P1616_Nginx视频教程_Nginx实现动静分离 P1717_Nginx视频教程_什么是虚拟主机? P1818_Nginx视频教程_Nginx实现虚拟主机 P...

    Nginx 代理与负载均衡详解

     nginx除了可以做网站的虚拟主机之外,还可以做代理器,并且, nginx在代理器的基础上可以做到负载均衡。   一、代理器:  所谓代理器,即接受请求,将请求进行转发,得到结果然后返回。  比如,我访问...

    nginx简介(http服务器,虚拟主机,反向代理,负载均衡)

    2.虚拟主机。 3.反向代理。 4.负载均衡。 HTTP服务器 NGINX本身也是一个静态资源的服务器,当只有静态资源的时候,就可以使用Nginx来做服务器。 server { listen 80; server_name localhost; c

    实战Nginx.取代Apache的高性能Web服务器

    第6章 Nginx HTTP负载均衡和反向代理的配置与优化 6.1 什么是负载均衡和反向代理 6.2 常见的Web负载均衡方法 6.3 Nginx负载均衡与反向代理的配置实例 6.4 Nginx负载均衡的HTTP Upstream 模块 6.5 Nginx负载均衡...

    实战nginx-张宴

    第6章 Nginx HTTP负载均衡和反向代理的配置与优化 6.1 什么是负载均衡和反向代理 6.2 常见的Web负载均衡方法 6.3 Nginx负载均衡与反向代理的配置实例 6.4 Nginx负载均衡的HTTP Upstream模块 6.5 Nginx负载均衡服务器...

    Nginx技术的学习 加油

    虚拟主机和代理: 解释如何配置虚拟主机和使用Nginx作为反向代理服务器,以提高应用性能。 负载均衡: 探讨Nginx如何实现负载均衡,分担流量以确保系统的高可用性和稳定性。 安全性配置: 提供有关如何通过Nginx...

    实战Nginx:取代Apache的高性能Web服务器 第一章

    第6章 Nginx HTTP负载均衡和反向代理的配置与优化 6.1 什么是负载均衡和反向代理 6.2 常见的Web负载均衡方法 6.3 Nginx负载均衡与反向代理的配置实例 6.4 Nginx负载均衡的HTTP Upstream 模块 6.5 Nginx负载均衡...

    nginx-0.8.33.zip一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器

     Nginx作为负载均衡服务器: Nginx 既可以在内部直接支持 Rails 和 PHP 程序对外进行服务, 也可以支持作为 HTTP代理服务器对外进行服务. Nginx采用C进行编写, 不论是系统资源开销还是CPU使用效率都比 Perlbal 要好很...

    架构师培训教程 大数据高并发服务器实战 第2.4篇-LNMP部分-Nginx部分-基本配置 共30页.pptx

    第2.6篇-Nginx部分-反向代理和负载均衡-负载均衡配置 共9页 第2.7篇-Nginx部分-Rewrite功能 共29页 第2.8篇-Nginx部分-Nginx工作原理 共15页 第2.9篇-Nginx部分-与Tomcat整合配置 共14页 第3篇-Memcached缓存篇 共30...

    架构师培训教程 大数据高并发服务器实战 第2.9篇-Nginx部分-与Tomcat整合配置 共14页.pptx

    第2.6篇-Nginx部分-反向代理和负载均衡-负载均衡配置 共9页 第2.7篇-Nginx部分-Rewrite功能 共29页 第2.8篇-Nginx部分-Nginx工作原理 共15页 第2.9篇-Nginx部分-与Tomcat整合配置 共14页 第3篇-Memcached缓存篇 共30...

    誉天邹老师Nginx网站架构02-Nginx虚拟主机及相关配置

    视频讲解:Nginx的架构,地址重写、反向代理、负载均衡等内容。...Nginx的并发能力,以及自带的反向代理和负载均衡的功能都非常强大,目前很多的WEB服务器和相关的架构均采用Nginx,如: 迅雷、12306、金山、新浪博客。

Global site tag (gtag.js) - Google Analytics