linux服务基础之nginx配置详解

nginx简单介绍:https://www.cnblogs.com/ckh2014/p/10848670.html

nginx编译安装:https://www.cnblogs.com/ckh2014/p/10848623.html

nginx相关配置:

主配置段的指令:

  正常运行的必备配置

1. user USERNAME [GROUPNAME]  
      指定运行worker进程的用户和组;      比如:user nginx nginx;

2. pid /path/to/pid_file;  指定nginx守护进程的pid文件:    pid /var/run/nginx/nginx.pid;

3.worker_rlimit_nofile #;  指定所有worker进程所能够打开的最大文件句柄数;

  性能优化相关的配置

1. worker_processes #
     worker进程的个数:通常应该略小于CPU物理核心数;

2. worker_cpu_affinity cpumask...;    优点:提升缓存的命中率    context switch:会产生CPU的不必要的消耗    cpumask:      0000 0001      0000 0010      0000 0100

   worker_cpu_affinity 00000001 00000010 00000100;

3. timer_resolution  计时器解析度:降低此值,可减少gettimeofday()系统调用的次数;

4. worker_priority number;  指明worker进程的nice值    -20,19    100,139

  事件相关的配置:  

1. accept_mutex {off|on};
    master调度用户请求至各worker进程时使用的负载均衡锁;on表示能让多个worker轮流的、序列化的去响应新请求;
2. lock_file;  accept_mutex用到的锁文件路径;

3.use [epoll|rtsig|select|poll];  指明使用的事件模型:建议让Nginx自行选择;

4. worker_connections #;  设定单个worker进程所能够处理的最大并发连接数量

  worker_connections * work_processes

用于调试、定位问题:

1. daemon {on|off};  是否以守护进程方式运行nginx, 调试时应该设置为off

2. master_process {on|off};  是否以master/worker模型来运行nginx;调试时可以设置为off

3. error_log file | stderr | syslog:server=address[,parameter=value] | memory:size [debug | info | notice | warn | error | crit | alert | emerg];    error_log 位置 级别;

    若要使用debug级别,需要在编译nginx时使用--with-debug选项;

总结: 常需要进行调整的参数

worker_processes, worker_connections, worker_cpu_affinity, work_priority

新改动配置生效的方式:

nginx -s reload  stop, quit, reopen

Nginx作为web服务器时使用的配置:

http {}: 由ngx_http_core_module模块所引入;

配置框架:

http {
   upstream {
     ...
   }

   server {
     location URL {       root "/path/to/somedir";        ...     } # 类似于httpd中的<Location>,用于定义URL与本地文件系统的映射关系;     location URL {        if ...{          ...        }     }
   } # 每个server类似于httpd中的一个<VirtualHost>;      server {     ...   }}

注意:与httpd相关的指令仅能放置于http、server/location、upstream、if上下文,但有些指令仅应用于这5种上下文中的某些种;

配置指令:

1. server {}  定义一个虚拟主机;  示例:  server {    listen 8080;    server_name www.alen.com;    root "/vhosts/web1";  }

2. listen   指定监听的地址和端口:     listen address[:port];     listen port;

3. server_name NAME [...];  后可跟多个主机;名称还可以使用正则表达式(~)或通配符;  (1)先做精确匹配检查:  (2)左侧通配符匹配检查: *.alen.com   (3) 右侧通配符匹配检查;如mail.*   (4)正则表达式匹配检查: 如~^.*\.alen\.com$   (5) default_server;  server {     server_name www.alen.com;  }  server {    server_name *.alen.com;  }  server {    server_name mail.*;  }

4. root path;  设置资源路径映射;用于指明请求的URL所对应的资源所在的文件系统上的起始路径;

5. location [ = | ~* | ^~] uri {}   location @name {}   功能: 允许根据用户请求的URI来匹配定义的各location;匹配到时,此请求将被相应的location配置块中的配置所处理,例如做访问控制等功能  =:精确匹配  ~:正则表达式模式匹配检查,区分字符大小写;  ~*:正则表达式模块匹配检查,不区分字符大小写;  ^~: URI的前半部分匹配,不支持正则表达式

  匹配的优先级:精确匹配(=)、^~、~、~*、不带任何符号的location

  server {    listen 80;    server_name www.alen.com;    location / {      root "/vhosts/web1";    }        location /images/ {      root "/vhosts/images";    }

    location ~* \.php$ {      fcgipass    }  }

6. alias path;  用于location配置段,定义路径别名

  location /images/ {    root "/vhosts/web1";  }  http://www.alen.com/images/a.jpg <-- /vhosts/web1/images/a.jpg

  location /images/ {    alias "/www/pictures";  }  http://www.alen.com/images/a.jpg <-- /www/pictures/a.jpg    注意: root表示指明路径为对应的location "/" URL;alias表示路径映射,即location指令后定义的URL是相对于alias所指明的路径而言;

7.index file;  默认主页面;    index index.php index.html;

8. error_page code [...] [=code] URI | @name  根据http响应状态码来指明特用的错误页面;

  error_page 404 /404_customed.html  [=code]:以指定的响应吗进行响应,而不是默认的原来的响应;默认表示以新资源的响应吗为其响应吗

9. 基于IP的访问控制  allow IP/Network;  deny IP/Network;

10. 基于用户的访问控制  basic, digest;

  auth_basic "";  auth_basic_user_file ".PATH/TO/PASSWORD_FILE"     账号密码文件建议使用htpasswd来创建

11. https服务

  生成私钥,获得证书签署请求,并获得证书;

  #server {
    # listen 443 ssl;
    # server_name localhost;
    # ssl_certificate cert.pem;
    # ssl_certificate_key cert.key;
    # ssl_session_cache shared:SSL:1m;
    # ssl_session_timeout 5m;
    # ssl_ciphers HIGH:!aNULL:!MD5;
    # ssl_prefer_server_ciphers on;
    # location / {
      # root html;
      # index index.html index.htm;
    # }
  #}

12. stub_status {on|off};  仅能用于location上下文;

  location /status {    stub_status on;    allow 192.168.1.0/24;    deny all;  }    结果示例:   Active connections:6  # 当前所有处于打开状态的连接数   server accepts handled requests    241 241 431  # 已经接受的连接,已经处理过的连接,已经处理过的请求数;在“保持连接”模式下,请求数量可能会多余连接数量   Reading: 0 Writing: 1 Waiting: 5       # Reading: 正处于接收请求状态的连接数;     # Writing: 请求已经接收完成,正处于处理请求或响应的过程中的连接数     # Waiting: 保持连接模式,且处于活动状态的连接数

13. rewrite regex replacement flag;    例如:      rewrite ^/images/(.*\.jpg)$ /imgs/$1 break;            http://www.alen.com/images/a/b/c/1.jpg --> /imgs/a/b/c/1.jpg            flag:      last: 此rewrite规则重写完成后,不再被后面其他的rewrite规则进行处理;而是由User Agent重新对重写后的URL再一次发起请求,并从头开始执行类似的过程      break:一旦此rewrite规则重写完成后,由User Agent对新的URL重新发起请求,且不再会被当前loation内的任何rewrite规则检查      redirect:以302响应码(临时重定向)返回新的URL;      permanent:以301响应码(永久重定向)返回新的URL

14. if  语法: if (condition) {...}  应用环境: server, location    condition:    (1)变量名;      变量值为空串,或者以“0”开始,则为false;其他均为true    (2)以变量为操作数构成的比较表达式      可使用=,!=类似的比较操作符进行测试    (3)正则表达式的模式匹配操作       ~: 区分大小写的模式匹配检查       ~*: 不区分大小写的模式匹配检查       !~和!~*:对上面两种测试取反    (4)测试路径为文件可能性: -f, !-f     (5) 测试指定路径为目录的可能性: -d, !-d     (6)测试文件的存在性:-e,!-e     (7)检查文件是否有执行权限:-x,!-x        例如:      if ($http_user_agent ~* MSIE) {        rewrite ^(.*)$ /msie/$1 break;      }

15. 防盗链   location ~* \.(jpg|gif|jpeg|png)$ {     valid_referer none blocked www.alen.com;     if ($invalid_referer){       rewrite ^/ http://www.alen.com/403.html;     }   }

16. 定制访问日志格式

    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;

  注意: 此处可用变量为nginx各模块内建变量;

网络连接相关的配置:

1. keepalive_timeout #;
    长连接的超时时长,默认为75s;

2.keepalive_requests #;  在一个长连接上所能够允许请求的最大资源数

3.keepalive_disable [msie6|safari|none];  为指定类型的User Agent禁用长连接;

4. tcp_nodelay on|off;  是否对长连接使用TCP_NODELAY选项;

5. client_header_timeout #;  读取http请求报文首部的超时时长;

6. client_body_timeout #;  读取http请求报文body部分的超时时长;

7. send_timeout #;  发送响应报文的超时时长;

 fastcgi的相关配置:

LNMP:PHP启用fpm模型;

原文地址:https://www.cnblogs.com/ckh2014/p/10849969.html

时间: 2024-10-06 09:23:29

linux服务基础之nginx配置详解的相关文章

nginx配置详解和原理

nginx配置详解和原理 1.nginx的配置文件 nginx 配置文件的整体结构 <pre>user nobody nobody; # 指定Nginx Worker进程运行用户以及用户组,默认由nobody账号运行,nobody 是系统用户,是一个不能登陆的帐号,一个特殊用途的用户 ID #启动进程,通常设置成和cpu的数量相等worker_processes 1; #指定了Nginx要开启的进程数.每个Nginx进程平均耗费10M~12M内存.建议指定和CPU的数量一致即可. #全局错误日

rsync服务的简介和配置详解

rsync服务的简介和配置详解 一.rsync概述 rsync是类unix系统下的数据镜像备份工具--remote sync.与传统的cp.tar备份方式相比,rsync具有安全性高.备份迅速.支持增量备份.本地复制,远程同步等优点,通过rsync可以解决对实时性要求不高的数据备份需求,例如定期的备份文件服务器数据到远端服务器,对本地磁盘定期做数据镜像等. rsync 命令来同步系统文件之前要先登录remote 主机认证,认证过程中用到的协议有2种:ssh 协议和rsync协议. 二.rsync

web服务之httpd-2.2配置详解01

本文旨在复习httpd2.2常用配置.复习http协议相关知识.httpd2.2配置文件相关配置介绍.配置httpd的身份验证.配置httpd虚拟主机 等等. 知识储备: http协议知多少? http协议: HTTP:hyper text transfer protocol,超文本传输协议,是互联网上应用最为广泛的一种网络协议.HTTP是一个客户端终端(用户)和服务器端(网站)请求和应答的标准.通常,由HTTP客户端发起一个请求,创建一个到服务器指定端口(默认是80端口)的TCP连接.HTTP

第二十天 TCP 及socket通信原理、http协议及web服务、httpd核心配置详解

一.TCP及socket通信原理详解 二.http协议及web服务原理(一) 三.http协议及web服务原理(二) 四.httpd核心配置详解 1.tcp.udp是一种传输协议,实现进程地址标记,套接字是一个虚拟设备,用来表明主机上的某个进程      众所周知:0-1023:管理员才有权限使用,永久地分配给某应用使用(由IANA分配)      注册端口:1024-41951:只有一部分被注册,分配原则上非特别严格.      动态端口或私有端口:41952-65535:由内核分配临时端口,

企业级Nginx服务基础到架构优化详解--25条

1.隐藏nginx header版本号 2.更改源码隐藏软件名称 3.更改nginx默认用户及用户组 4.配置nginx worker进程个数 5.根据CPU核数进行nginx进程优化 6.nginx事件处理模型优化 7.调整Nginx worker单个进程允许的客户端最大连接数 8.配置Nginx worker进程最大打开文件数 9.开启高效的文件传输模式 10.设置连接超时时间 11.上传文件大小设置(动态应用) 12.fastcgi调优(配合PHP引擎动态服务) 13.配置nginx gz

企业级Nginx服务基础到架构优化详解

1.隐藏nginx header版本号 2.更改源码隐藏软件名称 3.更改nginx默认用户及用户组 4.配置nginx worker进程个数 5.根据CPU核数进行nginx进程优化 6.nginx事件处理模型优化 7.调整Nginx worker单个进程允许的客户端最大连接数 8.配置Nginx worker进程最大打开文件数 9.开启高效的文件传输模式 10.设置连接超时时间 11.上传文件大小设置(动态应用) 12.fastcgi调优(配合PHP引擎动态服务) 13.配置nginx gz

Linux 软件包管理器-----yum配置详解一

一.yum简介    Yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器.基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载.安装.    yum 的理念是使用一个中心仓库(repository)管理一部分甚至一个distribution 的应用程序相互关系,根据计算出来的软件依赖关系进行相关的升级.安装.删

nginx 配置详解(新手必看)

内容来源:http://blog.csdn.net/david_xtd/article/details/16967837 译者注:不知道其他开发者是否和我一样,参与或者写了很多Web项目,但是却没有真正的去完整的部署应用,很多时候都是交给ops即运维的同学帮忙来做.而作为一个有节操的开发者,我认为了解一些服务器方面的知识是很有必要的,读了这篇文章之后,自己对nginx也有了一个初步的认识,对自己很有帮助,不敢独享,遂译之. 如果你是一名Web开发人员,那么你很有可能听过nginx(读音听起来像e

Nginx配置详解

Nginx配置文件主要分成四部分: main(全局设置)指令将影响其它所有部分的设置: server(主机设置)指令主要用于指定虚拟主机域名.IP和端口: upstream(上游服务器设置,主要为反向代理.负载均衡相关配置)指令用于设置一系列的后端服务器,设置反向代理及后端服务器的负载均衡: location(URL匹配特定位置后的设置),每部分包含若干个指令.location部分用于匹配网页位置(比如,根目录"/","/images",等等). 他们之间的关系式: