Nginx 服务器配置和详解

news/2024/7/9 17:44:41 标签: 运维, epoll, 操作系统

目录

  • Nginx 服务器配置和详解
    • Nginx 模板配置
    • Nginx 模块说明
      • 核心模块
      • http 模块

Nginx 服务器配置和详解

Nginx 扮演 web 开发的服务端入口控制的角色,相比 Apache,Nginx 使用更少的资源,支持更多的并发连接,体现更高的效率。这需要开发人员对其配置有一定程度的了解,主要用到的是负载均衡和反向代理这两项功能。

Nginx 模板配置

user  www www;

worker_processes  2;

pid /var/run/nginx.pid;

#[ debug | info | notice | warn | error | crit ]

error_log  /var/log/nginx.error_log  info;

events {
    worker_connections   2000;

    # use [ kqueue | epoll | /dev/poll | select | poll ];
    use kqueue;
}

http {

    include       conf/mime.types;
    default_type  application/octet-stream;


    log_format main      '$remote_addr - $remote_user [$time_local] '
                         '"$request" $status $bytes_sent '
                         '"$http_referer" "$http_user_agent" '
                         '"$gzip_ratio"';

    log_format download  '$remote_addr - $remote_user [$time_local] '
                         '"$request" $status $bytes_sent '
                         '"$http_referer" "$http_user_agent" '
                         '"$http_range" "$sent_http_content_range"';

    client_header_timeout  3m;
    client_body_timeout    3m;
    send_timeout           3m;

    client_header_buffer_size    1k;
    large_client_header_buffers  4 4k;

    gzip on;
    gzip_min_length  1100;
    gzip_buffers     4 8k;
    gzip_types       text/plain;

    output_buffers   1 32k;
    postpone_output  1460;

    sendfile         on;
    tcp_nopush       on;
    tcp_nodelay      on;
    send_lowat       12000;

    keepalive_timeout  75 20;

    #lingering_time     30;
    #lingering_timeout  10;
    #reset_timedout_connection  on;


    server {
        listen        one.example.com;
        server_name   one.example.com  www.one.example.com;

        access_log   /var/log/nginx.access_log  main;

        location / {
            proxy_pass         http://127.0.0.1/;
            proxy_redirect     off;

            proxy_set_header   Host             $host;
            proxy_set_header   X-Real-IP        $remote_addr;
            #proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;

            client_max_body_size       10m;
            client_body_buffer_size    128k;

            client_body_temp_path      /var/nginx/client_body_temp;

            proxy_connect_timeout      70;
            proxy_send_timeout         90;
            proxy_read_timeout         90;
            proxy_send_lowat           12000;

            proxy_buffer_size          4k;
            proxy_buffers              4 32k;
            proxy_busy_buffers_size    64k;
            proxy_temp_file_write_size 64k;

            proxy_temp_path            /var/nginx/proxy_temp;

            charset  koi8-r;
        }

        error_page  404  /404.html;

        location = /404.html {
            root  /spool/www;
        }

        location /old_stuff/ {
            rewrite   ^/old_stuff/(.*)$  /new_stuff/$1  permanent;
        }

        location /download/ {

            valid_referers  none  blocked  server_names  *.example.com;

            if ($invalid_referer) {
                #rewrite   ^/   http://www.example.com/;
                return   403;
            }

            #rewrite_log  on;

            # rewrite /download/*/mp3/*.any_ext to /download/*/mp3/*.mp3
            rewrite ^/(download/.*)/mp3/(.*)\..*$
                    /$1/mp3/$2.mp3                   break;

            root         /spool/www;
            #autoindex    on;
            access_log   /var/log/nginx-download.access_log  download;
        }

        location ~* \.(jpg|jpeg|gif)$ {
            root         /spool/www;
            access_log   off;
            expires      30d;
        }
    }
}

上述模板来自于 Nginx 官方示例

Nginx 模块说明

核心模块

控制整个 Nginx 的基本功能和程序配置

主模块

user www www;
worker_processes 2;

error_log /var/log/nginx-error.log info;
...
  • user user [group]:定义运行 Nginx 的用户和其所在组,该项默认 ser nobody nobody 可以使用默认配置。在 linux 系统上,一切皆文件,每个文件都有其访问权限,如果访问了权限外的文件,客户端会接受到服务端 403 错误。不设置 group 则组名与用户名一致。
  • worker_processes number | auto:工作进程数,一般与 cpu 核心数保持一致,可以设置为 auto,Nginx 可以自动调整为最佳个数。
  • error_log file [level]:日志存放目录,level 日志输出等级
  • pid file :进程 id 存储位置
  • worker_cpu_affinity:工作进程与 cpu 绑定
worker_processes    4;
\\1表示对应cpu核心工作
worker_cpu_affinity 0001 0010 0100 1000;
  • worker_rlimit_nofile number:一个工作进程可打开的最大文件数,设置该值后 worker_connections 不能超过该值,理论上这个值是最多打开文件数(ulimit -n)与 Nginx 工作进程相除。

event 模块

events {
    use kqueue;
    worker_connections 2048;
}
...
  • use method:事件模型,Linux 系统下设置有效,默认会找出最适合系统的事件模型,常用 use epoll
  • worker_connections number:设置最大并发连接数,该值不仅仅是与客户端连接。通过 worker_connectionsworker_proceses 可以计算出 max_clients = worker_processes * worker_connections,作为反向代理,max_clients = worker_processes * worker_connections/4
  • multi_accept on | off:关闭时一个进程只接受一个连接,开启时尽可能接受连接,连接放进监听队列

http 模块

配置 http 服务相关

  • include:定义文件扩展名,该文件包含类型映射表
  • default_type:默认解析类型
  • limit_req_zone key zone=name:size rate=rate:如limit_req_zone $binary_remote_addr zone=limit:10m rate=1r/s;,10m 缓存,每秒仅允许统一 ip 访问一次 超出频率或者缓存超出则返回 503
  • sendfile on | off:开启后 Nginx 使用零拷贝的方式输出文件,一般设置为 on,对于磁盘 IO 重负债应用时可以设置 off
  • tcp_nopush on | off:激活 tcp_nopush 参数可以允许把 http response header 和文件的开始放在一个文件里发布或者发送一个满包的文件,传输大量数据有利,只有 sendfile 起效是才有作用
  • tcp_nodelay on | off:启用后会禁用 Nagle 算法,尽快发送数据,Nginx 只会针对 keep-alive 状态的起作用,该选项看似与tcp_nopush矛盾,但同时启用产生的效果是先填满包在尽快发送
  • keepalive_timeout:连接超时时间

upstream 模块

upstream backend {
    server backend1.example.com       weight=5;
    server backend2.example.com:8080;
    #server 192.168.1.116  backup;
    server unix:/tmp/backend3;

    server backup1.example.com:8080   backup;
    server backup2.example.com:8080   backup;
}

server {
    location / {
        proxy_pass http://backend;
    }
}

该模块主要完成负载均衡功能

  • server address [parameters]
  • weight:代表权重,权重越高被分配的记录越大
  • max_conns:限制最大活动连接数,默认为 0,表示没有限制
  • fail_timeout=time:与服务器通信失败时长,默认 10 s
  • max_fails:设置在 fail_timeout 内连接到主机的失败次数,超过该次数则认为该主机不可用

server 模块

server {
    server_name ~^(www\.)?(.+)$;

    location / {
        root /sites/$2;
    }
}
  • listen:可设置为只是监听 ip 地址,或者端口,也可以是两者都有,也可以是主机名称
listen 127.0.0.1:8000;
listen 127.0.0.1;
listen 8000;
listen *:8000;
listen localhost:8000;
  • server_name name ...:主机名称,可以使用通配符,多个主机空格隔开

location 模块

location = / {
    [ configuration A ]
}

location / {
    [ configuration B ]
}

location /documents/ {
    [ configuration C ]
}

location ^~ /images/ {
    [ configuration D ]
}

location ~* \.(gif|jpg|jpeg)$ {
    [ configuration E ]
}

该模块完成对请求分类处理

  • = 开头表示精确匹配
  • 单个 / 表示通用匹配任何请求都能匹配到
  • ^~ 表示匹配 url 路径
  • ~ 表示区分大小写的正则匹配
  • ~* 表示不区分大小写的正则匹配
  • !~ 表示区分大小写的正则不匹配
  • !~* 表示不区分大小写的正则不匹配

  • proxy_pass URL:代理服务器地址
  • proxy_set_header field value:代理请求头设置,Nginx 可以重新定义或附加请求表头
//主机名称
proxy_set_header Host  $host;
//真实请求 ip,如果不存在该字段,则该$proxy_add_x_forwarded_for变量等于该$remote_addr变量。
proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;
proxy_set_header  X-Real-IP  $remote_addr;  

转载于:https://www.cnblogs.com/whylei/p/nginx-config-01.html


http://www.niftyadmin.cn/n/1804569.html

相关文章

【Linux 运维】 date的使用

date的使用 一、常用时间格式 #年、月、日 四位年大写,其余小写 [rootlocalhost ~]# date %Y #长格式显示四位数年 2018 [rootlocalhost ~]# date %y #2位短格式显示 18 [rootlocalhost ~]# date %m #月 10 [rootlocalhost ~]# date %d #日 06 [rootlo…

提示没有安装JRE插件或者被浏览器拦截的解决方法

文章目录出现问题第一步 确保Java环境安装好第二步 打开控制面板--查找到Java第三步 编辑站点列表第四步 再次访问网站注意出现问题 第一步 确保Java环境安装好 java -version java version "1.8.0_251" Java(TM) SE Runtime Environment (build 1.8.0_251-b08) Jav…

mysql学习--sql语句

myemployees.sql文件 CREATE TABLE departments ( department_id int(4) NOT NULL AUTO_INCREMENT, department_name varchar(3) DEFAULT NULL, manager_id int(6) DEFAULT NULL, location_id int(4) DEFAULT NULL, PRIMARY KEY (department_id), KEY loc_id_fk (…

YUM简单入门

1.制作YUM源先关闭相关安全设置,安装vsftpd [rootrhel7 ~]# firewall-cmd --set-default-zonetrusted 设置防火墙受信 [rootrhel7 ~]# setenforce 0 [rootrhel7 ~]# systemctl start vsftpd 启动已经安装的vsftpd [rootrhel7 ~]# systemctl enable vsftpd [rootrh…

Shiro漏洞工具的使用

文章目录01 下载ShiroExploit.V2.3,并运行.jar02 运行后的界面03输入测试的url04 选择检测方式05 判断是否存在漏洞的依据06 反弹shell01 下载ShiroExploit.V2.3,并运行.jar 在github上直接搜索下载有源码,可以自己编译成.jar 02 运行后的…

Jenkins报错Error cloning remote repo 'origin'

Jenkins控制台输出报错 输出ERROR: Error cloning remote repo origin 这行报错只能说明是git有问题,其他没什么有用的信息。 浏览器中CtrlF查找ERROR,提示No such file or directory。怀疑git路径设置有问题 Jenkins配置git的绝对路径系统管理--->全…

typeScript(二)

变量和数据类型 一、什么是变量 通俗的讲:变量,是用来存储数据的容器,并且是可以变化的。 保温杯里泡枸杞 ,变量里面存数据。 枸杞难挡岁月催,杯里再换点当归:枸杞 -> 当归。二、变量的使用 2.1 基本…

Vue音乐项目笔记(一)

看到一位小可爱的手记,这里记录一下自己需要注意的地方的链接 1.手写轮播图(上) https://blog.csdn.net/weixin_40814356/article/details/80298115 遇到的问题:上面这样写完后。slide-item的class名字不能添加上,什么原因。 在这里的问题我反…