nginx基本配置,参数说明和启动,停止,重启
1:序言
Nginx是lgor Sysoev为俄罗斯访问量第二的rambler.ru站点设计开发的。从2004年发布至今,凭借开源的力量,已经接近成熟与完善。
Nginx功能丰富,可作为HTTP服务器,也可作为反向代理服务器,邮件服务器。支持FastCGI、SSL、Virtual Host、URL Rewrite、Gzip等功能。并且支持很多第三方的模块扩展。
Nginx的稳定性、功能集、示例配置文件和低系统资源的消耗让他后来居上,在全球活跃的网站中有12.18%的使用比率,大约为2220万个网站。
牛逼吹的差不多啦,如果你还不过瘾,你可以百度百科或者一些书上找到这样的夸耀,比比皆是。
2:Nginx常用功能
1:Http代理,反向代理:作为web服务器最常用的功能之一,尤其是反向代理。
这里我给来2张图,对正向代理与反响代理做个诠释,具体细节,大家可以翻阅下资料。
Nginx在做反向代理时,提供性能稳定,并且能够提供配置灵活的转发功能。Nginx可以根据不同的正则匹配,采取不同的转发策略,比如图片文件结尾的走文件服务器,动态页面走web服务器,只要你正则写的没问题,又有相对应的服务器解决方案,你就可以随心所欲的玩。并且Nginx对返回结果进行错误页跳转,异常判断等。如果被分发的服务器存在异常,他可以将请求重新转发给另外一台服务器,然后自动去除异常服务器。
2:负载均衡
Nginx提供的负载均衡策略有2种:内置策略和扩展策略。内置策略为轮询,加权轮询,Ip hash。扩展策略,就天马行空,只有你想不到的没有他做不到的啦,你可以参照所有的负载均衡算法,给他一一找出来做下实现。
上3个图,理解这三种负载均衡算法的实现
Ip hash算法,对客户端请求的ip进行hash操作,然后根据hash结果将同一个客户端ip的请求分发给同一台服务器进行处理,可以解决session不共享的问题。
3:web缓存
Nginx可以对不同的文件做不同的缓存处理,配置灵活,并且支持FastCGI_Cache,主要用于对FastCGI的动态程序进行缓存。配合着第三方的ngx_cache_purge,对制定的URL缓存内容可以的进行增删管理。
4:Nginx相关地址
源码:https://trac.nginx.org/nginx/browser
官网:http://www.nginx.org/
3:Nginx配置文件结构
如果你下载好啦,你的安装文件,不妨打开conf文件夹的nginx.conf文件,Nginx服务器的基础配置,默认的配置也存放在此。
在nginx.conf的注释符号位#
nginx文件的结构,这个对刚入门的同学,可以多看两眼。
默认的config
- ########### 每个指令必须有分号结束。#################
- #user administrator administrators; #配置用户或者组,默认为nobody nobody。
- #worker_processes 2; #允许生成的进程数,默认为1
- #pid /nginx/pid/nginx.pid; #指定nginx进程运行文件存放地址
- error_log log/error.log debug; #制定日志路径,级别。这个设置可以放入全局块,http块,server块,级别以此为:debug|info|notice|warn|error|crit|alert|emerg
- #工作模式及连接数上限
- events {
- #epoll是多路复用IO(I/O Multiplexing)中的一种方式,
- #仅用于linux2.6以上内核,可以大大提高nginx的性能
- use epoll;#事件驱动模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport
- #单个后台worker process进程的最大并发链接数
- worker_connections 1024;
- accept_mutex on; #设置网路连接序列化,防止惊群现象发生,默认为on
- multi_accept on; #设置一个进程是否同时接受多个网络连接,默认为off
- # 并发总数是 worker_processes 和 worker_connections 的乘积
- # 即 max_clients = worker_processes * worker_connections
- # 在设置了反向代理的情况下,max_clients = worker_processes * worker_connections / 4
- # 为什么上面反向代理要除以4,应该说是一个经验值
- # 根据以上条件,正常情况下的Nginx Server可以应付的最大连接数为:4 * 8000 = 32000
- # worker_connections 值的设置跟物理内存大小有关
- # 因为并发受IO约束,max_clients的值须小于系统可以打开的最大文件数
- # 而系统可以打开的最大文件数和内存大小成正比,一般1GB内存的机器上可以打开的文件数大约是10万左右
- # 我们来看看360M内存的VPS可以打开的文件句柄数是多少:
- # $ cat /proc/sys/fs/file-max # 输出 34336 # 32000 < 34336,
- # 即并发连接总数小于系统可以打开的文件句柄总数,这样就在操作系统可以承受的范围之内
- # 所以,worker_connections 的值需根据 worker_processes
- # 进程数目和系统可以打开的最大文件总数进行适当地进行设置
- # 使得并发总数小于操作系统可以打开的最大文件数目
- # 其实质也就是根据主机的物理CPU和内存进行配置
- # 当然,理论上的并发总数可能会和实际有所偏差,因为主机还有其他的工作进程需要消耗系统资源。
- # ulimit -SHn 65535}
- http {
- #设定mime类型,类型由mime.type文件定义
- include mime.types;
- default_type application/octet-stream;
- #设定日志格式
- log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"';
- access_log logs/access.log main;
- #sendfile 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,
- #对于普通应用,必须设为 on,
- #如果用来进行下载等应用磁盘IO重负载应用,可设置为 off,
- #以平衡磁盘与网络I/O处理速度,降低系统的uptime.
- sendfile on;
- #tcp_nopush on;
- #连接超时时间
- #keepalive_timeout 0;
- keepalive_timeout 65;
- tcp_nodelay on;
- #开启gzip压缩 gzip on;
- gzip_disable "MSIE [1-6].";
- #设定请求缓冲
- client_header_buffer_size 128k;
- large_client_header_buffers 4 128k;
- upstream mysvr {
- server 127.0.0.1:7878;
- server 192.168.10.121:3333 backup; #热备
- }
- error_page 404 https://www.baidu.com; #错误页
- #设定虚拟主机配置
- server {
- keepalive_requests 120; #单连接请求上限次数。
- #侦听80端口
- listen 80;
- #定义使用 www.nginx.cn访问
- server_name www.nginx.cn;
- #定义服务器的默认网站根目录位置
- root html;
- #设定本虚拟主机的访问日志
- access_log logs/nginx.access.log main;
- #默认请求
- location / {
- #定义首页索引文件的名称
- index index.php index.html index.htm;
- }
- # 定义错误提示页面
- error_page 500 502 503 504 /50x.html;
- location = /50x.html {
- }
- #静态文件,nginx自己处理
- location ~ ^/(images|javascript|js|css|flash|media|static)/ {
- #过期30天,静态文件不怎么更新,过期可以设大一点,
- #如果频繁更新,则可以设置得小一点。
- expires 30d;
- }
- #PHP 脚本请求全部转发到 FastCGI处理. 使用FastCGI默认配置.
- location ~ .php$ {
- fastcgi_pass 127.0.0.1:9000;
- fastcgi_index index.php;
- fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
- include fastcgi_params;
- }
- location ~*^.+$ { #请求的url过滤,正则匹配,~为区分大小写,~*为不区分大小写。
- #root path; #根目录
- #index vv.txt; #设置默认页
- proxy_pass http://mysvr; #请求转向mysvr 定义的服务器列表
- deny 127.0.0.1; #拒绝的ip
- allow 172.18.5.54; #允许的ip
- }
- #禁止访问 .htxxx 文件
- location ~ /.ht {
- deny all;
- }
- }
- }
上面是nginx的基本配置,需要注意的有以下几点:
1、
1.$remote_addr 与$http_x_forwarded_for 用以记录客户端的ip地址;
2.$remote_user :用来记录客户端用户名称;
3.$time_local : 用来记录访问时间与时区;
4.$request : 用来记录请求的url与http协议;
5.$status : 用来记录请求状态;成功是200,
6.$body_bytes_s ent :记录发送给客户端文件主体内容大小;
7.$http_referer :用来记录从那个页面链接访问过来的;
8.$http_user_agent :记录客户端浏览器的相关信息;
2、惊群现象:一个网路连接到来,多个睡眠的进程被同事叫醒,但只有一个进程能获得链接,这样会影响系统性能。
3、每个指令必须有分号结束。
附加 Nginx的启动/停止/重启
1:启动
启动代码格式:nginx安装目录地址 -c nginx配置文件地址
例如:
[[email protected] sbin]#/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
2:停止
nginx的停止有三种方式:
1、查看进程号
[[email protected] ~]#ps -ef|grep nginx
2、杀死进程
[[email protected] ~]#kill -QUIT 2072
3:重启
1、验证nginx配置文件是否正确
方法一:进入nginx安装目录sbin下,输入命令./nginx -t
看到如下显示nginx.conf syntax is ok
nginx.conf test is successful
说明配置文件正确!
方法二:在启动命令-c前加-t
[[email protected] sbin]#/usr/local/nginx/sbin/nginx-t -c/usr/local/nginx/conf/nginx.conf
2、重启Nginx服务
方法一:进入nginx可执行目录sbin下,输入命令./nginx -s reload即可
方法二:查找当前nginx进程号,然后输入命令:kill -HUP 进程号 实现重启nginx服务
- <pre code_snippet_id="2149796" snippet_file_name="blog_20170125_2_9659130"></pre>
- <pre></pre>
- <pre></pre>