Nginx的安装与配置
这篇文章主要介绍了关于Nginx的安装与配置,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下
Nginx学习实践
一、选择Nginx目的
高并发连接
官方测试nginx能够支撑5万并发连接,实际测试可以达到3万左右,按照这样计算,每天可以处理
亿次访问量,采用最新epoll(Linux 2.6内核)和kqueue(freebsd)网络I/O模型;而achache则使用的是传统的selelct
模型内存消耗小
Nginx+php(FastCIGI)服务器在3万并发连接下,开启10个nginx进程消耗150MB内存(15MB*10),开启64个php-cgi
进程消耗1280MB内存(20MB*64),使用webbench做压力测试,在3万并发量速度依然很快。Nginx支持负载均衡
Nginx支持反向代理
成本低廉
相对于F5BIG-IP、NetScaler等硬件负载均衡交换机动辄10多万设置几十万,可以免费使用,并且可以用于商业用途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的核数来定
首先要查看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的安装与配置的详细内容,更多请关注其它相关文章!
下一篇: PHP之流程的控制代码详解(图文)