Nginx的基本学习

简介: Nginx的基本学习

前言


在我们的日常工作中,或许仅仅是编辑后端代码,完成自己的工作内容,可能用不到nginx。Nginx一般适用于部署项目。当然,我们也可以不使用他,通过对外开启不同的端口,问题也可以解决。Nginx也是一个容器,可以运行网页,而且可以反向代理。比如,配置多个服务,跨域请求等操作。但是,如果我们追求完美,不想使用其他的端口(如果是我们的程序后台直接调用我们的服务器接口,默认端口为80)。这个时候就应该使用nginx这个工具了,使用他可以实现在一个服务器上面部署多个网站的目标/任务。好,那么接下来,我们来看一下nginx 的配置。


正文


#$开头是变量
#定义Nginx运行的用户和用户组
user work work;
#nginx进程数,建议设置为等于CPU总核心数
worker_processes  auto;
#指当一个nginx进程打开的最多文件描述符数目
worker_rlimit_nofile 204800;
#全局错误日志定义类型,[ debug | info | notice | warn | error | crit ]
error_log  /opt/log/nginx/error.log error;
#工作模式及连接数上限
events {
        #参考事件模型,use [ kqueue | rtsig | epoll | /dev/poll | select | poll ]; 
        #epoll模型是Linux 2.6以上版本内核中的高性能网络I/O模型,如果跑在FreeBSD上面,就用kqueue模型
        use epoll;
        #单个后台worker process进程的最大并发链接数
        worker_connections  102400;
}
#设定http服务器,利用它的反向代理功能提供负载均衡支持
http {
        #文件扩展名与文件类型映射表
        include       mime.types;
        #默认文件类型
        default_type  application/octet-stream;
        #默认编码
        charset utf-8;
        #设定日志格式
        #log_format  main  '$idXXXX\t$remote_addr\t$remote_user\t$time_local\t$http_host\t$request\t'
        #             '$status\t$body_bytes_sent\t$http_referer\t'
        #             '$http_user_agent\t$http_x_forwarded_for\t$request_time\t$upstream_response_time\t$userid';
        log_format main "$cookie_idXXXX\t$remote_addr\t$remote_user\t[$time_local]\t$request_method\t$host\t$request_uri\t"
                        "$request_time\t$status\t$body_bytes_sent\t'$http_referer'\t"
                        "'$http_user_agent'\t'$http_x_forwarded_for'\t$upstream_addr\t$upstream_response_time\t$upstream_status\t";
    #不可见字符分隔日志格式
    #include other_log_format.conf;
    #实时日志收集json格式日志
    #include json_log_format.conf;
        #日志流格式
        log_format stream_log "$cookie_idXXXX\t$remote_addr\t$remote_user\t[$time_local]\t$request_method\t$host\t$request_uri\t"
                      "$request_time\t$status\t$body_bytes_sent\t'$http_referer'\t"
                      "'$http_user_agent'\t'$http_x_forwarded_for'\t$upstream_addr\t$upstream_response_time\t3";
        #成功日志
        access_log  /opt/log/nginx/access.log main;
        #access_log syslog:local6:notice:log1.op.XXXXdns.org:514:nginx-main-log main;
        #指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,对于普通应用,
        #必须设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为 off,以平衡磁盘与网络I/O处理速度,降低系统的uptime.
        sendfile        on;
        #长连接超时时间,单位是秒
        keepalive_timeout  60;
        #服务器名称哈希表的最大值(默认512)[hash%size]
        server_names_hash_max_size 1024;
        #服务器名字的hash表大小
        server_names_hash_bucket_size 256;
        #客户请求头缓冲大小 
        client_header_buffer_size 4k;
        #如果header过大,它会使用large_client_header_buffers来读取
        large_client_header_buffers 4 256k;
        client_header_timeout  1m;
        client_body_timeout    1m;
        send_timeout           1m;
        #防止网络阻塞
        tcp_nopush     on;
        tcp_nodelay    on;
        #允许客户端请求的最大单文件字节数
        client_max_body_size 50m;
        #缓冲区代理缓冲用户端请求的最大字节数
        client_body_buffer_size 50m;
        #nginx跟后端服务器连接超时时间(代理连接超时)
        proxy_connect_timeout 5;
        #后端服务器数据回传时间(代理发送超时)
        proxy_send_timeout 15;
        #连接成功后,后端服务器响应时间(代理接收超时)
        proxy_read_timeout 15;
        #设置代理服务器(nginx)保存用户头信息的缓冲区大小
        proxy_buffer_size 4k;
        #proxy_buffers缓冲区,网页平均在32k以下的话,这样设置
        proxy_buffers 8 32k;
        #高负荷下缓冲大小(proxy_buffers*2)
        proxy_busy_buffers_size 64k;
        #设定缓存文件夹大小,大于这个值,将从upstream服务器传
        proxy_temp_file_write_size 64k;
        proxy_intercept_errors  on;
        #客户端放弃请求,nginx也放弃对后端的请求
        #proxy_ignore_client_abort on;
    #代理缓存头信息最大长度[设置头部哈希表的最大值,不能小于你后端服务器设置的头部总数]
    proxy_headers_hash_max_size 512;
    #设置头部哈希表大小(默认64)[这将限制头部字段名称的长度大小,如果你使用超过64个字符的头部名可以加大这个值。]
    proxy_headers_hash_bucket_size 256;
    #变量哈希表的最大值(默认值)
    variables_hash_max_size 512;
    #为变量哈希表制定关键字栏的大小(默认64)
    variables_hash_bucket_size 128;
        #开启gzip压缩输出
        gzip on;
        #最小压缩文件大小
        gzip_min_length 1k;
        #压缩缓冲区
        gzip_buffers     4 16k;
        #压缩等级
        gzip_comp_level 9;
        #压缩版本(默认1.1,前端如果是squid2.5请使用1.0)
        gzip_http_version 1.0;
        #压缩类型,默认就已经包含textml
        gzip_types text/plain application/x-javascript application/json application/javascript text/css application/xml text/javascript image/gif image/png;
        gzip_vary on;
        #map模块使用
        map_hash_max_size 102400;
        map_hash_bucket_size  256;
        #Tengine Config
        #concat on;
        #trim on;
        #trim_css off;
        #trim_js off;
        server_tokens off;
        #footer "<!— $remote_addr $server_addr $upstream_addr —>";
        #rewrite_log on;
        fastcgi_intercept_errors on;
    #include other config file
        include ../conf.d/.conf;
    #包含一些特殊站点的配置文件,此目录下文件暂时不包含在git自动管理过程中
    include ../special/.conf;
    #屏蔽不加主机域名的默认请求
    #server {
        #   listen *:80 default;
        #   servername "";
        #   return 444;
    #}
    #Nginx状态监测模块配置
    req_status_zone server "$server_name,$server_addr:$server_port" 10M;
    req_status server;
    server {
        listen 127.0.0.1:80;
        server_name 127.0.0.1;
        access_log /opt/log/nginx/nginx_status/status_access.log main;
            location /status {
                req_status_show;
                access_log /opt/log/nginx/nginx_status/status_access.log main;
                allow 127.0.0.1;
                deny all;
                }
            location /stub_status {
                stub_status on;
                access_log /opt/log/nginx/nginx_status_stub/status_stub_access.log main;
                allow 127.0.0.1;
                deny all;
            }
            location /check_status {
                check_status;
                access_log /opt/log/nginx/nginx_status_check/status_access_check.log main;
                allow 127.0.0.1;
                deny all;
            }
    }
}
1、下面是可以用来判断的表达式:
-f和!-f用来判断是否存在文件
-d和!-d用来判断是否存在目录
-e和!-e用来判断是否存在文件或目录
-x和!-x用来判断文件是否可执行
2、下面是可以用作判断的全局变量
$args #这个变量等于请求行中的参数。
$content_length #请求头中的Content-length字段。
$content_type #请求头中的Content-Type字段。
$document_root #当前请求在root指令中指定的值。
$host #请求主机头字段,否则为服务器名称。
$http_user_agent #客户端agent信息
$http_cookie #客户端cookie信息
$limit_rate #这个变量可以限制连接速率。
$request_body_file #客户端请求主体信息的临时文件名。
$request_method #客户端请求的动作,通常为GET或POST。
$remote_addr #客户端的IP地址。
$remote_port #客户端的端口。
$remote_user #已经经过Auth Basic Module验证的用户名。
$request_filename #当前请求的文件路径,由root或alias指令与URI请求生成。
$query_string #与$args相同。
$scheme #HTTP方法(如http,https)。
$server_protocol #请求使用的协议,通常是HTTP/1.0或HTTP/1.1。
$server_addr #服务器地址,在完成一次系统调用后可以确定这个值。
$server_name #服务器名称。
$server_port #请求到达服务器的端口号。
$request_uri #包含请求参数的原始URI,不包含主机名,如:”/foo/bar.php?arg=baz”。
$uri #不带请求参数的当前URI,$uri不包含主机名,如”/foo/bar.html”。
$document_uri #与$uri相同。
例:http://localhost:88/test1/test2/test.php
$host:localhost
$server_port:88
$request_uri:http://localhost:88/test1/test2/test.php
$document_uri:/test1/test2/test.php
$document_root:D:\nginx/html
$request_filename:D:\nginx/html/test1/test2/test.php
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
20天前
|
负载均衡 应用服务中间件 数据处理
Nginx学习使用
Nginx学习使用
46 0
|
8月前
|
应用服务中间件 网络安全 nginx
Nginx学习研究-Nginx 安装 SSL 配置 HTTPS
Nginx学习研究-Nginx 安装 SSL 配置 HTTPS
305 0
|
19天前
|
监控 Unix 应用服务中间件
Android-音视频学习系列-(八)基于-Nginx-搭建(rtmp、http)直播服务器
Android-音视频学习系列-(八)基于-Nginx-搭建(rtmp、http)直播服务器
|
4天前
|
Ubuntu 应用服务中间件 Linux
蓝易云 - Linux学习之Ubuntu20中OpenResty的nginx目录里内容和配置文件
你可以根据你的需要修改这个配置文件,例如增加新的服务器块,位置块,修改监听的端口等。修改完配置文件后,你需要重载Nginx配置,可以使用 `/usr/local/openresty/nginx/sbin/nginx -s reload`命令来实现。
15 0
|
20天前
|
负载均衡 应用服务中间件 Linux
深入浅出学习透析Nginx服务器的架构分析及原理分析「底层技术原理+运作架构机制」
深入浅出学习透析Nginx服务器的架构分析及原理分析「底层技术原理+运作架构机制」
50 0
|
20天前
|
缓存 负载均衡 安全
Nginx 学习
Nginx 学习
31 0
|
20天前
|
应用服务中间件 nginx
【Nginx学习】—Nginx基本知识
【Nginx学习】—Nginx基本知识
|
6月前
|
应用服务中间件 Linux 网络安全
小白带你学习linux Nginx基本部署 (二十一)
小白带你学习linux Nginx基本部署 (二十一)
36 0
|
7月前
|
负载均衡 算法 应用服务中间件
Nginx学习使用
Nginx学习使用
51 1
|
7月前
|
应用服务中间件 API nginx
通过 docker 学习 nginx,附全部配置及 API 测试,使用 apifox 直接打开
本篇文章以前端的视角,介绍下 nginx 的常见配置,并通过 docker 的方式学习 nginx,这保证所有实例配置都能正常运行。