Home  >  Article  >  Backend Development  >  Nginx installation and configuration

Nginx installation and configuration

不言
不言Original
2018-06-05 09:30:062320browse

这篇文章主要介绍了关于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/

su root

进入用户目录下载程序

cd /usr/local/src

现在相关组件

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++编译环境,如已安装可略过

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

安装Nginx及相关组件

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安装位置

whereis nginx

启动、停止、重启命令

启动:/usr/local/nginx/sbin/nginx
重启:/usr/local/nginx/sbin/nginx -s reload
停止:/usr/local/nginx/sbin/nginx -s stop

配置文件打开、验证

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

查看nginx进程

ps -aux | grep nginx

查看端口

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

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

Nginx配置

1、进程配置:nginx开辟的进程数根据cpu的核数来定
Nginx installation and configuration
首先要查看cpu核数命令:

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的不同需求来进行配置,可以使用字段串与正则表达式匹配,如果要使用正则表达式,你必须制定下列前缀
~:区分大小写
~*:不区分大小写
^~:禁止表达式匹配
=:精确匹配

例子:

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.地址重写

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端口放开!!!!

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.日志管理

 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.介绍部分缓存

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.代理,反向代理和负载均衡

正向代理的概念

正向代理,也就是传说中的代理,他的工作原理就像一个跳板,
简单的说,
我是一个用户,我访问不了某网站,但是我能访问一个代理服务器
这个代理服务器呢,他能访问那个我不能访问的网站
于是我先连上代理服务器,告诉他我需要那个无法访问网站的内容
代理服务器去取回来,然后返回给我
正常情况: 
client —(send request)—> server
代理情况: 
client —(send request)—> clinet proxy –(send request)—> server

什么又是反向代理

正向代理中代理的过程是客户端,代理机器是作为一个访问客户的身份的;而在反向代理中代理机器是作为服务身份。
正向代理中代理的过程是客户端,服务端对代理的存在无感知;而在反向代理中客户机对代理的存在无感知。
反向代理情况: 
clinet –(send request)–> server proxy –(send request)–>other 
server
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应用:使用nginx进行负载均衡

Nginx的场景实践

Nginx编译安装Lua模块 

The above is the detailed content of Nginx installation and configuration. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn