`

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部分-反向代理和负载均衡-反向代理配置 共13页.pptx

    共30页第2.5篇-Nginx部分-虚拟主机配置 共12页第2.6篇-Nginx部分-反向代理和负载均衡-反向代理配置 共13页第2.6篇-Nginx部分-反向代理和负载均衡-负载均衡配置 共9页第2.7篇-Nginx部分-Rewrite功能 共29页第2.8篇-...

    Nginx实现虚拟主机

    无论是作为高性能Web服务器还是反向代理和负载均衡器,Nginx都能够胜任并表现出色。通过合理配置虚拟主机和其他高级特性,可以有效提升网站的性能和用户体验。希望上述知识点能够帮助您更好地理解和运用Nginx。

    Web服务器nginx虚拟主机与反向代理.docx

    Nginx 可以应用于各种场景,例如负载均衡、内容分发网络、反向代理、虚拟主机等。 8. Nginx 的安全性 Nginx 有很高的安全性,支持 SSL 加密,保护数据的安全。 9. Nginx 的优化 Nginx 可以进行优化,例如调整...

    nginx正向代理与反向代理详解

    总结来说,Nginx的正向代理和反向代理都是通过配置代理规则,实现网络请求的转发。正向代理用于帮助内部网络设备访问外部网络,而反向代理则用于控制外部网络对内部服务器的访问,提供负载均衡和安全防护等功能。...

    Nginx入门到精通搭建高可用集群负载均衡

    - `server` 块:定义虚拟主机,如 `listen 80` 和 `server_name localhost`。 - `location` 块:定义请求匹配规则,如 `/` 表示根目录,`proxy_pass` 实现反向代理。 **4. 反向代理与正向代理的区别** - **正向...

    nginx+tomcat实现负载均衡1

    在IT行业中,构建高效、可扩展的Web服务是至关重要的,而"nginx+tomcat实现负载均衡1"的主题就是探讨如何通过Nginx反向代理和Tomcat应用服务器结合,来提升系统的性能和稳定性。这一组合是业界常用的一种架构模式,...

    使用Nginx轻松实现开源负载均衡

    Nginx,以其高效的反向代理和负载均衡能力,成为了许多企业的首选。本文将深入探讨如何使用Nginx实现开源负载均衡,帮助你构建稳定、高效的分布式系统。 ### 1. Nginx 简介 Nginx 是一款高性能的 HTTP 和反向代理...

    windows下nginx配置https以及同一个端口监听多个网站即监听多个虚拟主机

    在Windows环境下,配置Nginx以支持HTTPS及在同一端口监听多个网站,即配置多个虚拟主机,是一项常见的网络服务设置任务。...同时,根据实际需求,还可以对Nginx配置进行更复杂的优化,如负载均衡、缓存等。

    nginx和tomcat配置SSL和负载均衡配置

    Nginx 作为反向代理服务器时,可以非常方便地实现负载均衡。下面是一个简单的负载均衡配置示例: ```nginx http { upstream backend { server backend1.example.com; server backend2.example.com; server ...

    nginx实现Tomcat反向代理

    2. **配置Nginx**:在Nginx的配置文件(通常是`/etc/nginx/nginx.conf`或`/etc/nginx/sites-available/default`)中,我们需要创建一个新的虚拟主机或者在现有主机配置中添加反向代理规则。以下是一个简单的示例: ...

    nginx+tomcat 负载均衡简易配置与动静分离

    总结来说,"nginx+tomcat 负载均衡简易配置与动静分离"是通过Nginx作为反向代理,结合Tomcat应用服务器,实现静态内容和动态请求的分离处理,以及请求的负载均衡,从而达到高可用、高性能的Web服务架构。

    03-nginx虚拟主机配置.zip

    Nginx是一款高性能、轻量级的Web服务器和反向代理服务器,常被用于互联网应用的负载均衡和高并发处理。在本教程中,我们将深入探讨如何利用Nginx配置虚拟主机,实现多个网站在同一台服务器上的独立运行。 **一、...

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

    ### Nginx与Tomcat实现负载均衡的知识点详解 #### Nginx简介及特性 Nginx是一款由Igor Sysoev开发的高性能HTTP服务器和反向代理服务器,以其出色的稳定性和低系统资源消耗而著称。最初是为俄罗斯访问量排名第二的...

    基于linux下nginx的安装及项目部署

    通过以上步骤,我们可以成功地在Linux系统上安装Nginx并配置反向代理和负载均衡,实现高效且稳定的项目部署。在实际环境中,还需要根据具体需求调整Nginx配置,以满足安全、性能和扩展性的要求。

    Nginx负载均衡配置

    Nginx 作为一款高性能的反向代理服务器和负载均衡器,其在负载均衡配置方面具有强大的功能。 **1. Nginx 的安装** 首先,我们需要在服务器上安装 Nginx。对于基于 Linux 的系统,通常可以通过包管理器如 `apt` ...

    Nginx+Tomcat高性能负载均衡集群搭建(模板).zip

    2. **配置负载均衡**: 在Nginx的配置文件`nginx.conf`或其包含的虚拟主机配置文件中,添加负载均衡配置。例如,使用轮询策略(round-robin): ```nginx upstream tomcat_cluster { server tomcat1.example....

Global site tag (gtag.js) - Google Analytics