Nginx 学习总结(2) —— 基本配置

这是 Nginx 学习总结的第二篇,上一篇介绍到了 Nginx 学习总结(1) —— 概述,这一篇会对 Nginx 的基本配置做一些总结。

Nginx 配置信息主要分为六大部分: main(全局设置)events(事件设置)http(HTTP服务器设置)sever(虚拟主机设置)location(URL匹配设置)upstream(反向代理设置)

main 模块

user nobody nobody;

worker_processes auto;

error_log  /usr/local/var/log/nginx/error.log  error;

pid        /usr/local/var/run/nginx/nginx.pid;

worker_rlimit_nofile 1024;
  • user 指定 Worker 进程的运行用户以及用户组,默认由 nobody 运行;
  • worker_processes 设置 Nginx 要开启的 Worker 进程数。最优值取决于许多因素,包括(但不限于)CPU 内核的数量、存储数据的硬盘数量及负载模式。不能确定的时候,将其设置为可用的 CPU 内核数将是一个好的开始(设置为auto将尝试自动检测它);
  • error_log 指定全局错误日志的输出文件位置和错误级别。日志级别有 debuginfonoticewarnerrorcritalertemerg 可供选择,错误级别依次递增。设置某个日志级别将记录指定的以及错误级别更高的所有消息(即 debug 输出日志最为最详细,而 emerg 输出日志最少)。默认开启为 error。想要开启 debug 错误级别,需要在编译 Nginx 时指定 --with-debug 参数;
  • pid 指定记录 PID 进程的存储文件位置( Nginx 向 Worker 进程发送信号时,需要知道是在向哪个进程发送信息,而不同的进程有不同的 PID),用户仅需创建该空白文件即可;
  • worker_rlimit_nofile 设置每个 Worker 进程可以打开的最大文件数目(如果不设置该选项,则该选项的值为操作系统的限制值,使用“ulimit -a”命令可查看)。

events 模块

events {
    use epoll; 
    worker_connections  1024;
}
  • use 设置事件处理模型。Nginx 支持的事件处理模型有: selectpollkqueueepollrtsig/dev/poll,其中 kqueue(BSD 特有) 和 epoll(Linux 特有) 都是高效的事件处理模型。如果不设置,Nginx 将会自动选择一个最适合当前操作系统的事件处理模型;
  • worker_connections 设置每个 Worker 进程能并发处理的最大连接数。最大客户端连接数由 worker_processesworker_connections 决定:Nginx 作为 HTTP 服务器时,Max_clients = worker_processes * worker_connections;Nginx 作为反向代理时,Max_clients = worker_processes * worker_connections / 4

http 模块

http {
    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  /usr/local/var/log/nginx/access.log  main;
    #access_log off

    sendfile        on;
    tcp_nopush      on;
    tcp_nodelay     on;

    keepalive_timeout  65;
    
    # gzip压缩功能设置
    gzip  on;
    gzip_min_length 1k;
    gzip_buffers    4 16k;
    gzip_http_version 1.0;
    gzip_comp_level 6;
    
    client_max_body_size 10M;
    client_body_buffer_size 128k;
    
    # http_proxy 设置
    proxy_connect_timeout   75;
    proxy_send_timeout   75;
    proxy_read_timeout   75;
    proxy_buffer_size   4k;
    proxy_buffers   4 32k;
    proxy_busy_buffers_size   64k;
    proxy_temp_file_write_size  64k;
    proxy_temp_path   /usr/local/nginx/proxy_temp 1 2;

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}
  • include 加载 mime.type 文件,用于帮助 Nginx 识别文件的 MIME 类型;
  • default_type 指定文件默认的 MIME 类型。例如,在没有配置 asp 的环境时,Nginx 是不予解析的,此时,浏览器访问 asp 文件就会出现下载了;
  • log_format 设置日志的格式;
  • access_log 设置 access_log 日志文件地址;
  • sendfile 是否开启高效文件传输模式。将 tcp_nopushtcp_nodelay 两个指令设置为 on 用于防止网络阻塞;
  • keepalive_timeout 设置客户端连接保持活动的超时时间,在超过这个时间之后,服务器会关闭该连接;
  • gzip 是否开启 gzip 压缩,这将会减少我们发送的数据量;
  • client_max_body_size 允许客户端请求的最大单文件字节数。如果上传较大文件,请增加它的限制值;
  • client_body_buffer_size 允许客户端请求的最大缓冲区字节数;
  • proxy_connect_timeout 设置与后端服务器连接超时时间。

server 模块

server {
    listen       80;
    server_name  localhost 192.168.12.10 jochen.com;
        
    root   /usr/www;
    index  index.php index.html index.htm; 

    charset utf-8;
    
    error_page  404   /404.html;
    error_page  403   /403.html;
    error_page  500 502 503 504  /50x.html;
    
    access_log  usr/local/var/log/host.access.log  main;
    aerror_log  usr/local/var/log/host.error.log  error;
}
  • listen 设置监听端口,默认 80,小于 1024 的要以 root 用户启动。可以为 listen *:80listen 127.0.0.1:80 等形式;
  • server_name 设置域名,多个域名之间用空格分开;
  • root 设置虚拟主机的默认网站根目录;
  • index 定义默认访问的文件名;
  • charset 设置网页的默认编码格式;
  • error_page 设置错误页面,相对于上面的 root 目录。

location 模块

location / {
    root   /usr/share/nginx/html;
    index  index.php index.html index.htm;
}

location ~ \.php$ {
    root           /usr/share/nginx/html;
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    include        fastcgi.conf;
}

location /nginx-status {
  stub_status on;
  allow 192.168.10.100;
  allow 172.29.73.0/24;
  deny all;
}

location 模块用于针对某些特定的 URL 进行配置,有关 location 匹配规则详情请见《Nginx 学习总结(3) —— location 模块》。

upstram 模块

upstream jochen.com {
    ip_hash;
    server 192.168.12.1:80;
    server 192.168.12.2:80 down;
    server 192.168.12.3:8080  max_fails=3  fail_timeout=20s;
    server 192.168.12.4:8080;
}

upstream 模块用于负载均衡,有关 upstream 模块详情请见《Nginx 学习总结(7) —— 负载均衡》。

参考文章:

  1. nginx documentation
  2. nginx 服务器安装及配置文件详解
  3. nginx 的配置、虚拟主机、负载均衡和反向代理(1)

PHP 学习总结
研读官网文档和网络优秀个人文章,对 PHP 编程相关作出学习总结。

Stay hungry, stay foolish.

846 声望
84 粉丝
0 条评论
推荐阅读
PHP 微服务集群搭建
微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间相互协调、互相配合,为用户提供最终价值。每个服务运行在其独立的进程中,服务和服务之间采用轻量级的通信机制相互沟通。每个服务...

Jochen112阅读 14.2k评论 6

如何选择适合你的微服务 API 网关:对比 Kong、APISIX、Tyk、Apigee 和其他网关
API 网关并非一个新兴的概念,在十几年前就已经存在了,它的作用主要是作为流量的入口,统一的处理和业务相关的请求,让请求更加安全、快速和准确的得到处理。它有以下传统的功能:

API7_技术团队8阅读 8.6k评论 2

有了 NGINX 和 Kong,为什么还需要 Apache APISIX?
2021 年 5 月,云原生社区技术沙龙·广州站,API7.ai(支流科技)联合创始人 & CTO,Apache APISIX PMC 王院生在活动上做了《有了 NGINX 和 Kong,为什么还需要 Apache APISIX》的分享,以下是现场分享的文字版。...

API7_技术团队1阅读 4.2k

Nginx 配置常用参数,看这一篇就够了
最近在全面学习Nginx,当作笔记了,如有错误,欢迎指出或深入交流。主模块 {代码...} 事件模块 {代码...} http部分 {代码...} 部分参数详细说明server_name {代码...} location {代码...} location表达式类型 {代...

开源到2阅读 1.9k

化虹为桥 - Nginx 如何代理 UDP “连接”
众所周知,UDP 并不像 TCP 那样是基于连接的。但有些时候,我们需要往一个固定的地址发送多个 UDP 来完成一个 UDP 请求。为了保证服务端能够知道这几个 UDP 包构成同一个会话,我们需要在发送 UDP 包时绑定某个端...

spacewander4阅读 1.6k

Nginx unexpected end of file 配置证书遇到问题,如何解决?
通过 letsencrypt 申请证书后,默认服务器安装了 Nginx 1.8 发现,在默认的 /etc/nginx/sites-enabled/default 内容配置 SSL 的 site.com.key 后。重启 Nginx 出现一下错误:

程序员泥瓦匠1阅读 1.2k

mac M1 nginx配置文件位置
mac nginx配置的原位置/usr/local/etc/nginx/nginx.confmac M1 nginx配置位置/usr/local/Homebrew/etc/nginx/nginx.confnginx -t 查看位置

寿兽阅读 3k

Stay hungry, stay foolish.

846 声望
84 粉丝
宣传栏