Nginx的安装与配置

转自http://www.php.cn/php-weizijiaocheng-400798.html

这篇文章主要介绍了关于Nginx的安装与配置,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下

Nginx学习实践


一、选择Nginx目的

  1. 高并发连接 
    官方测试nginx能够支撑5万并发连接,实际测试可以达到3万左右,按照这样计算,每天可以处理 
    亿次访问量,采用最新epoll(Linux 2.6内核)和kqueue(freebsd)网络I/O模型;而achache则使用的是传统的selelct 
    模型

  2. 内存消耗小 
    Nginx+php(FastCIGI)服务器在3万并发连接下,开启10个nginx进程消耗150MB内存(15MB*10),开启64个php-cgi 
    进程消耗1280MB内存(20MB*64),使用webbench做压力测试,在3万并发量速度依然很快。

  3. Nginx支持负载均衡

  4. Nginx支持反向代理

  5. 成本低廉 
    相对于F5BIG-IP、NetScaler等硬件负载均衡交换机动辄10多万设置几十万,可以免费使用,并且可以用于商业用途

  6. Nginx请求的连接方法 
    select,poll,kqueue,epoll

二、安装Nginx

准备环境 
Linux系统是Centos 6.5 64位,我直接切换到root用户下安装 
官方文档:http://nginx.org/en/

1

su root

进入用户目录下载程序

1

cd /usr/local/src

现在相关组件

1

ngnix:wget http://nginx.org/download/nginx-1.13.12.tar.gzwget http://www.openssl.org/source/openssl-fips-2.0.10.tar.gzwget http://zlib.net/zlib-1.2.11.tar.gzwget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.40.tar.gz

安装c++编译环境,如已安装可略过

1

2

3

[root@localhost src]# yum install gcc-c++省略安装内容...期间会有确认提示输入y回车

Is this ok [y/N]:y

省略安装内容...

安装Nginx及相关组件

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

openssl安装

[root@localhost src]# tar zxvf openssl-fips-2.0.10.tar.gz省略安装内容...[root@localhost src]# cd openssl-fips-2.0.10[root@localhost openssl-fips-2.0.10]# ./config && make && make install省略安装内容...pcre安装

[root@localhost src]# tar zxvf pcre-8.40.tar.gz省略安装内容...[root@localhost src]# cd pcre-8.40[root@localhost pcre-8.40]# ./configure && make && make install省略安装内容...zlib安装

[root@localhost src]# tar zxvf zlib-1.2.11.tar.gz省略安装内容...[root@localhost src]# cd zlib-1.2.11[root@localhost zlib-1.2.11]# ./configure && make && make install省略安装内容...nginx安装:

这里的先增加一个nginx用户组和一个nginx用户

例如:新建用户加入ftp组,/sbin/nologin意思是用户不允许登录(通过ftp可以连接),用户名为nginx

groupadd -r ftp

useradd -s /sbin/nologin -g ftp -r nginx

 

 

[root@localhost src]# tar zxvf nginx-1.13.12.tar.gz省略安装内容...[root@localhost src]# cd nginx-1.13.12[root@localhost nginx-1.10.2]# ./configure --sbin-path=/usr/local/nginx/sbin \

--conf-path=/usr/local/nginx/conf/nginx.conf \

--pid-path=/usr/local/nginx/logs/nginx.pid \

--with-http_ssl_module \

--with-pcre=../pcre-8.40 \  #指向解压的源码目录--with-zlib=../zlib-1.2.11 \    #指向解压的源码目录--with-openssl=../openssl-2.0.10 \ #指向解压的源码目录--with-http_stub_status_module \#启用 nginx 的 NginxStatus 功能,用来监控 Nginx 的当前状态--user=nginx \

--group=nginx

 

 

 

[root@localhost nginx-1.10.2]#make && make install省略安装内容...

启动Nginx

查看你的nginx安装位置

1

whereis nginx

启动、停止、重启命令

1

2

3

启动:/usr/local/nginx/sbin/nginx

重启:/usr/local/nginx/sbin/nginx -s reload

停止:/usr/local/nginx/sbin/nginx -s stop

配置文件打开、验证

1

2

配置文件:vim /usr/local/nginx/conf/nginx.conf

验证配置文件:/usr/local/nginx/sbin/nginx -t

查看nginx进程

1

ps -aux | grep nginx

查看端口

1

netstat -tulnp | grep :80      查询以80开头的端口服务

如果看到进程了,在本地浏览器输入:http://localhost就会看到欢迎界面;说明安装成功了。 
如果在别的机器访问可以输入nginx那台服务器ip,不过你要确保80端口是开放的,后面配置ssl要确保443端口开放。

Nginx配置

1、进程配置:nginx开辟的进程数根据cpu的核数来定 
Nginx的安装与配置_第1张图片
首先要查看cpu核数命令:

1

cat /proc/cpuinfo

2.worker_connections连接数配置 
网上建议: 
如果nginx 中worker_connections 值设置是1024,worker_processes 值设置是4,按反向代理模式下最大连接数的理论计算公式:最大连接数 = worker_processes * worker_connections/4 
查看相关资料,生产环境中worker_connections 建议值最好超过9000,计划将一台nginx 设置为10240,再观察一段时间。

3.location配置 
语法:location[=|~|~*|^~]/uri/{……} 
默认值:no 
使用字段:server 
这个参数根据uri的不同需求来进行配置,可以使用字段串与正则表达式匹配,如果要使用正则表达式,你必须制定下列前缀 
~:区分大小写 
~*:不区分大小写 
^~:禁止表达式匹配 
=:精确匹配

例子:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

location = / {    #只匹配/的查询

    [configurationA]

}

 

location / {    #匹配任务以/开始的查询,但是正则表达式与一些较长的字符串将被首先匹配

   [configuration B ]

}

 

location ^~ /images/ {    #匹配任何以/images/开始的查询并停止搜索,不检查正则表达式

    [configuration C ]

}

 

location ~*.(gif|jpg|jpeg)$ {    #匹配任何以gif,jpg,jpeg结尾的文件,但是所有/images/目录的请求将在configuration C中处理

    [configuration D]

}

 

 

error_page  404 403              /404.html;

location = /404.html {

    root   /var/christy/www/web;

}

 

 

location /data {    #开启data目录浏览

    autoindex on;

}#类似于别名location /i/ {    #当访问i的时候别名的路径就是/data/w3/images/;

    alias /data/w3/images/;

}

4.地址重写

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

Rewrite主要的功能就是实现URL的重写,nginx的rewrite规则采用PCRE Perl兼容正则表达式的语法进行规则匹配,

如果需要nginx的rewrite功能,在编译nginx之前,需要编译安装PCRE库

 

URL是统一资源定位符。如:http://www,linkwan.com/333/welcome.htmURI由一个通过通用资源标志符进行定位。比如:333/welcome.htm

 

地址重写用到的指令    if指令

规则语法

 

如果用户的代理是微软的msie(ie9以下),那么在浏览器里面输入http://www.chrXXtyedu.cn/dd就会跳转到http://www.christyedu.cn/msie/$1;ie10以上是Mozillaif ($http_user_agent ~ MSIE) {

    rewrite ^(.*)$ /msie/$1 break;

}

 

 

 

如果请求的文件名不存在就重定向到/site/$host/images/$1if(!-f $request_filename){

    rewrite ^/img/(.*)$ /site/$host/images/$1 last;

}

 

location ~* \.(gif|jpg|png|swf|flv)$ {

    valid_referers none blocked www.chrXXstyedu.cn chrXXtyedu.cn;    if ($invalid_referer) {

        rewrite ^/(.*) http://www.test.com/333/welcome permanent;

    } //防盗链}

 

设置限速

location /download/ {

    limit_rate_after 500k;

    limit_rate 50k;

}

大概意思是:用户下载达到 500k 后,便控制其速度在 50k 以内。

5.ssl配置 
1_chrXXtyedu.cn_bundle.crt 
2_chrXXtyedu.cn.key 
这两个文件放在conf目录下 
一定要把443端口放开!!!!

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

server {

        listen       443 ssl;

        server_name  www.chXXXtyedu.cn chrXXyedu.cn;

 

        ssl_certificate      1_chrXXtyedu.cn_bundle.crt;

        ssl_certificate_key  2_chrXXtyedu.cn.key;

 

        ssl_session_cache    shared:SSL:1m;

        ssl_session_timeout  5m;

        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;

        ssl_prefer_server_ciphers  on;

 

        location / {

            root   /var/chXXty/www/web-https;

            index  index.html index.htm;

        }

    }

6.日志管理

1

2

3

4

log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '

                     '$status $body_bytes_sent "$http_referer" '

                     '"$http_user_agent" "$http_x_forwarded_for"';    $http_x_forwarded_for$remote_addr客户端的ip地址(代理服务器,显示代理服务ip)    $remote_user用来记录远程客户端用户名称    $time_local用来记录访问时间以及时区    $request用于记录请求的URL与HTTP协议    $status用于记录请求状态,例如成功是状态为200,页面找不到时404

   $body_bytes_sent用于记录发送给客户端的文件主题内容大小    $http_referer用于记录是从哪个页面链接访问过来的    $http_user_agent用于记录客户端浏览器的相关信息

7.介绍部分缓存

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

open_log_file_cache指令

 

语法: open_log_file_cache max=N [inactive=time] [min_uses=N] [valid=time];

open_log_file_cache off;

默认值: open_log_file_cache off;

配置段: http, server, location

 

对于每一条日志记录,都将是先打开文件,再写入日志,然后关闭。可以使用open_log_file_cache来设置日志文件缓存(默认是off),格式如下:

 

参数注释如下:

max:设置缓存中的最大文件描述符数量,如果缓存被占满,采用LRU算法将描述符关闭。

inactive:设置存活时间,默认是10s

min_uses:设置在inactive时间段内,日志文件最少使用多少次后,该日志文件描述符记入缓存中,默认是1次

valid:设置检查频率,默认60s

off:禁用缓存

实例如下:

代码如下:

open_log_file_cache max=1000 inactive=20s valid=1m min_uses=2;

 

 

 

http {

    client_max_body_size 300m;

    client_body_buffer_size 600;

    proxy_connect_timeout 600;

    proxy_read_timeout 600;

    proxy_send_timeout 600;

    proxy_buffer_size 16k;

    proxy_buffers 4 32k;

    proxy_busy_buffers_size 64;

    proxy_temp_file_write_size 64k;

 }

 

 允许客户端请求的最大的单个文件字节数

 client_max_body_size

 

 缓冲区代理缓冲用户端请求的最大字节数 可以理解为先保存到本地再传给用户

 client_body_buffer_size

 

 跟后端服务器连接的超时时间 发起握手等候响应超时时间

 proxy_connect_timeout

 

 连接成功后_等候后端服务器响应时间_其实已经进入后端的排队之中等候处理

 proxy_read_timeout

 

 后端服务器数据回传时间_就是在规定时间之内后端服务器必须传完所有的数据

 proxy_send_timeout

 

 代理请求缓存区_这个缓存区间会保存用户的头信息以供Nginx进行规则处理_一般只要能保存下头信息即可

 proxy_buffer_size 16k

 

 同上告诉Nginx保存单个用的几个Buffer及最大用多大空间

 proxy_buffers 4 32k

 

 如果系统很忙的时候可以申请更大的proxy_bufers 官方推荐*2

 proxy_busy_buffers_size 64k;

 

 proxy缓存临时文件的大小

 proxy_temp_file_write_size 64k;

 

 location /sms {

    proxy_pass http://127.0.0:8080;    #设置Host是真实浏览器的,而不是代理的

    proxy_set_header Host $host;

    proxy_cache cache_one;    #设置请求ip是真实的ip,而不是代理的

    proxy_set_header X-Forwarded-For $remote_addr;

 }

8.代理,反向代理和负载均衡

正向代理的概念

1

2

3

4

5

6

7

8

9

10

正向代理,也就是传说中的代理,他的工作原理就像一个跳板,

简单的说,

我是一个用户,我访问不了某网站,但是我能访问一个代理服务器

这个代理服务器呢,他能访问那个我不能访问的网站

于是我先连上代理服务器,告诉他我需要那个无法访问网站的内容

代理服务器去取回来,然后返回给我

正常情况:

client —(send request)—> server

代理情况:

client —(send request)—> clinet proxy –(send request)—> server

什么又是反向代理

1

2

3

4

5

正向代理中代理的过程是客户端,代理机器是作为一个访问客户的身份的;而在反向代理中代理机器是作为服务身份。

正向代理中代理的过程是客户端,服务端对代理的存在无感知;而在反向代理中客户机对代理的存在无感知。

反向代理情况:

clinet –(send request)–> server proxy –(send request)–>other

server

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

Nginx集反向代理和负载均衡于一身,在配置文件中修改配就可以实现

upstream xxx{};upstream模块是命名一个后端服务器组,组名必须为(proxy_pass的名称)后端服务器站点域名,内部可以写多台服务器ip和port,还可以设置跳转规则及权重等等proxy_pass;代表后端服务器组名,此组名必须为后端服务器站点域名server_name和upstream{}的组名可以不一致,server_name是外网访问接收请求的域名,upstream{}的组名是跳转后端服务器时站点访问的域名

 

upstream chxxty_server {

        server 119.29.54.177:8081 weight=5;

        server 119.29.54.177:8080 weight=10 max_fails=3 fail_timeout=30s;}

 

 

server {

        listen       443 ssl;

        server_name  www.chXXtyedu.cn chxxxedu.cn;

 

        ssl_certificate      1_chxxtyedu.cn_bundle.crt;

        ssl_certificate_key  2_chxxyedu.cn.key;

 

        ssl_session_cache    shared:SSL:1m;

        ssl_session_timeout  5m;

 

        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;

        ssl_prefer_server_ciphers  on;

 

        location / {

            root   html;

            index  index.html index.htm;

        }

        location ~ .* {

                proxy_pass http://chxxty_server;

                #设置Host是真实浏览器的,而不是代理的

                proxy_set_header Host $host;

                #设置请求ip是真实的ip,而不是代理的

                proxy_set_header X-Forwarded-For $remote_addr;

        }

}

祝大家成功!

你可能感兴趣的:(Nginx)