[关闭]
@kklinan 2017-04-07T14:40:52.000000Z 字数 2871 阅读 862

Nginx 配置详解

Nginx


Nginx配置文件主要分成四部分:

每部分包含若干个指令。

main 部分设置的指令将影响其它所有部分的设置;
server 部分的指令主要用于指定虚拟主机域名、IP和端口;
upstream 部分的指令用于设置一系列的后端服务器,设置反向代理及后端服务器的负载均衡;
location 部分用于匹配网页位置(比如,根目录"/","/images",等等)。

他们之间的关系式:server继承main,location继承server;upstream既不会继承指令也不会被继承。它有自己的特殊指令,不需要在其他地方的应用。

参考文档


user nobody;
运行用户,一般设置为服务器指定的用户


worker_processes 1;
在配置文件的顶级main部分,worker角色的工作进程的个数 。一般设置为CPU的核数(cat /proc/cpuinfo| grep "cpu cores"| uniq 或 grep processor /proc/cpuinfo | wc -l)或 auto

参考:http://nginx.org/en/docs/ngx_core_module.html#worker_cpu_affinity


main

  1. #error_log logs/error.log;
  2. #error_log logs/error.log notice;
  3. #error_log logs/error.log info;
  4. pid logs/nginx.pid;

全局错误日志及PID文件


events

  1. events {
  2. use epoll;
  3. worker_connections 2048;
  4. }

epoll 是多路复用IO(I/O Multiplexing)中的一种方式,仅用于linux2.6以上内核,可以大大提高nginx的性能。
在 Linux 操作系统下,nginx 默认使用 epoll 事件模型,得益于此,nginx 在 Linux 操作系统下效率相当高。同时 Nginx 在 OpenBSD 或 FreeBSD 操作系统上采用类似于 epoll 的高效事件模型 kqueue。在操作系统不支持这些高效模型时才使用 select。
官方文档:http://nginx.org/docs/events.html

在 Nginx 中,每个进程会有一个连接数的最大上限,这个上限与系统对 fd 的限制不一样。在操作系统中,通过 ulimit -n ,我们可以得到一个进程所能够打开的 fd 的最大数,即 nofile,因为每个 socket 连接会占用掉一个 fd,所以这也会限制我们进程的最大连接数,当然也会直接影响到我们程序所能支持的最大并发数,当 fd 用完后,再创建 socket 时,就会失败。Nginx 通过设置 worker_connectons 来设置每个进程支持的最大连接数。如果该值大于 nofile,那么实际的最大连接数是 nofile,Nginx 会有警告。
这个值是表示每个 worker 进程所能建立连接的最大值,所以,一个 Nginx 能建立的最大连接
数,应该是 worker_connections * worker_processes 。当然,这里说的是最大连接数,对于 HTTP 请求本地资源来说,能够支持的最大并发数量是 worker_connections * worker_processes ,而如果是 HTTP 作为反向代理来说,最大并发数量应该是 worker_connections * worker_processes/2 。因为作为反向代理服务器,每个并发会建立与客户端的连接和与后端服务的连接,会占用两个连接。


http

  1. http {
  2. #设定mime类型,类型由mime.type文件定义
  3. include mime.types;
  4. default_type application/octet-stream;
  5. #设定日志格式
  6. log_format main '$remote_addr - $remote_user [$time_local] "$request" '
  7. '$status $body_bytes_sent "$http_referer" '
  8. '"$http_user_agent" "$http_x_forwarded_for"';
  9. access_log logs/access.log main;
  10. #sendfile 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,
  11. #对于普通应用,必须设为 on,
  12. #如果用来进行下载等应用磁盘IO重负载应用,可设置为 off,
  13. #以平衡磁盘与网络I/O处理速度,降低系统的uptime.
  14. sendfile on;
  15. #tcp_nopush on;
  16. #连接超时时间
  17. #keepalive_timeout 0;
  18. keepalive_timeout 65;
  19. tcp_nodelay on;
  20. #开启gzip压缩
  21. gzip on;
  22. gzip_disable "MSIE [1-6].";
  23. #设定请求缓冲
  24. client_header_buffer_size 128k;
  25. large_client_header_buffers 4 128k;
  26. #设定虚拟主机配置
  27. server {
  28. #侦听80端口
  29. listen 80;
  30. #定义使用 www.nginx.cn访问
  31. server_name www.nginx.cn;
  32. #定义服务器的默认网站根目录位置
  33. root /www/html;
  34. #设定本虚拟主机的访问日志
  35. access_log logs/nginx.access.log main;
  36. #默认请求
  37. location / {
  38. #定义首页索引文件的名称
  39. index index.php index.html index.htm;
  40. }
  41. # 定义错误提示页面
  42. error_page 500 502 503 504 /50x.html;
  43. location = /50x.html {
  44. }
  45. #静态文件,nginx自己处理
  46. location ~ ^/(images|javascript|js|css|flash|media|static)/ {
  47. #过期30天,静态文件不怎么更新,过期可以设大一点,
  48. #如果频繁更新,则可以设置得小一点。
  49. expires 30d;
  50. }
  51. #PHP 脚本请求全部转发到 FastCGI处理. 使用FastCGI默认配置.
  52. location ~ .php$ {
  53. fastcgi_pass 127.0.0.1:9000;
  54. fastcgi_index index.php;
  55. fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  56. include fastcgi_params;
  57. }
  58. #禁止访问 .htxxx 文件
  59. location ~ /.ht {
  60. deny all;
  61. }
  62. }
  63. }

指令参数

https://segmentfault.com/a/1190000002797601

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注