Nginx配置详解,一文带你搞懂ginx 配置详解

nginx配置

1.nginx

Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。

2. nginx文件的目录

  • fastcgi.conf:存放fastcgi 相关的配置
  • fastcgi.conf.default:fastcgi.conf 的原始备份文件,用于还原
  • fastcgi_params:fastcgi 相关参数文件
  • fastcgi_params.default:fastcgi_params 的原始备份文件,用于还原
  • koi-utf:编码转换映射文件
  • koi-win:编码转换映射文件
  • mime.types:存放媒体资源的类型,例如:xml、html、css
  • mime.types.default:mime.types 的原始备份文件,用于还原
  • nginx.conf:nginx 默认主配置文件
  • nginx.conf.default:nginx.conf 的原始备份文件,用于还原
  • scgi_params:与fastcgi_params一样,传递哪些服务器的变量
  • scgi_params.default:scgi_params 的原始备份文件,用于还原
  • uwsgi_params:服务器和服务端应用程序的通信协议,规定了怎么把请求转发给应用程序和返回
  • uwsgi_params.default:uwsgi_params 的原始备份文件,用于还原

3. nginx配置文件常用配置(nginx.conf)

nginx配置文件主要分为六个区域

  1. main:全局设置(作用域全局)
  2. events:nginx工作模式
  3. http:http设置
    • upstream:负载均衡服务器设置
      • server:主机设置(一个server节点就是一个虚拟机)
        • location :URL配置

3.1 main主配置区域,对应nginx 核心模块的功能

js 复制代码
#main区域,主配置区域,全局的

#定义Ngix运行的用户和用户组
user  nginx;

#启动工作进程数数量,一般设置和CPU核心数一致
worker_processes  1;    

#全局错误日志定义类型.【debug|info|notice|warm|error|crit】
error_log  logs/error.log;   
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#进程pid文件位置
#pid        logs/nginx.pid;    

3.2 events区域

js 复制代码
#events区域
 
events {
    #一个进程可以产生多少个工作的连接,nginx的最大并发访问量
    worker_connections  1024; 
    
    #使用epoll 模型,异步IO 处理模型,epoll 模型没有1024 的限制,并发发访问量特别快
    use epoll;    
}

3.3 nginx 核心模块常用配置参数

js 复制代码
http {
    #包含媒体资源类型的文件,调用mime.types文件.
    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  logs/access.log  main;
    
    #作为web服务器的时候打开sendfile加快静态文件传输
    sendfile        on;
    
    #在开启了sendfile的情况下,合并请求后统一发送给客户端。
    tcp_nopush     on;    
    
    #在开启了keepalived模式下的连接是否启用TCP_NODELAY选项,当为off时,延迟0.2s发送,默认On时,不延迟发送,立即发送用户相应报文。
    tcp_nodelay  off;
    
    #长连接超时时间,单位是秒
    keepalive_timeout  65;   
    
    #设置了每个散列桶占用的内存大小
    types_hash_max_size 2048;
    
    #开启压缩功能.
    gzip  on;
    
    #压缩的缓冲区大小
    gzip_buffers 16 8k;
    
	#压缩级别,默认为1
    gzip_comp_level 6;
    
	# 禁止那些浏览器压缩功能
	gzip_disable "MSIE [1-6].(?!.*SV1)";
   
	#小于128字节不压缩
	gzip_min_length 128;
    
    #只对 那些http版本进行压缩 默认 1.1 
	gzip_http_version 1.1;
    
 
    #用来配置虚拟主机,每一个server 段都是一个虚拟主机
    server {
        #监听80 端口,可以做基于端口的虚拟主机,listen 后面 IP加端口就是基于IP的虚拟主机
        listen       80; 
        
        #用来定义虚拟主机名称即域名; 支持*通配符,支持~起始字符做正则表达式匹配
        server_name  localhost;
        
		#设置编码格式,默认是俄语格式,可以改为utf-8
        charset utf-8;
        
 		#定义虚拟主机的访问日志
        access_log  /var/log/nginx/host.access.log  main;
 
        ###localtion 匹配段,用于匹配
        location / {
            #设置 WEB 资源路径映射,用于指明用户请求的 uri 所对应的本地文件系统上的文档目录.
            root   /usr/share/nginx/html;
            
            #默认资源设置
            index  index.html index.htm;
        }
          
 		#当客户端访问出错时定义返回的页面, 跳转404页面 /404.html;   
        #error_page  404              
        # redirect server error pages to the static page /50x.html
        #
        
        #错误页面重定义
        error_page   500 502 503 504  /50x.html;    
        location = /50x.html {
            root   html;
        }
    
        # proxy the api scripts to Apache listening on xxx.xxx.xxx.xxx
        location /api/ {
            
            # webapi服务的IP地址和端口,内网地址
            proxy_pass         http://xxx.xxx.xxx.xxx;
            proxy_set_header   Host              $host;
            proxy_set_header   X-Real-IP         $remote_addr;
            proxy_set_header   X-Forwarded-For   $proxy_add_x_forwarded_for;
            proxy_set_header   X-Forwarded-Proto $scheme;
            proxy_set_header   X-Forwarded-Port  $server_port;
            
			#此指令设置nginx能处理的最大请求主体大小
            client_max_body_size 200m;
            #接超时时间
            proxy_read_timeout  500;
        }

      
        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}
 
        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        location ~ \.php$ {
            root           html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
            include        fastcgi.conf;
        }
 
        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }
 
 
   

4.nginx前端怎么配置

在nginx目录下添加一个html文件做静态文件托管,端口为8080

  1. 将前端项目复制到/nginx/html文件夹下
  2. 将nginx下的配置文件(/nginx/conf/nginx.conf)里的添加一个server节点配置改为要配置的域名
js 复制代码
server {
        #监听的端口,
        listen       8080;
    
        #此处localhost可改为要访问的域名或者ip地址
        server_name  localhost;
    
        #编码
        charset utf-8;

        #access_log  logs/host.access.log  main;
    
        #error_page  404              /404.html;

        location / {
            #nginx下HTML文件夹,访问上述域名时会检索此文件夹下的文件进行访问
            root   html;
            #输入网址(server_name:port)后,默认的访问页面
            index  index.html index.htm;
        }
}
  1. 配置正确后,重启nginx(service nginx restart )
js 复制代码
service nginx restart
  1. 测试访问

5.nginx代理后端API

如果有跨域问题。可以添加代理配置(用/api替换了//xxx.xxx.xxx.xxx。)

js 复制代码
location /api/ {
    # webapi服务的IP地址和端口,内网地址
    proxy_pass         http://xxx.xxx.xxx.xxx;
    
    #重定义发往后端服务器的请求头
    proxy_set_header   Host              $host;
    proxy_set_header   X-Real-IP         $remote_addr;
    proxy_set_header   X-Forwarded-For   $proxy_add_x_forwarded_for;
    proxy_set_header   X-Forwarded-Proto $scheme;
    proxy_set_header   X-Forwarded-Port  $server_port;

    client_max_body_size 200m;
    proxy_read_timeout  500;
}

6.nginx查看服务状态

nginx中需要配置开启Nginx Status来查看服务器运行状态

  1. 开启nginx status
js 复制代码
server {
        #监听的端口,
        listen       8080;
        
        ···

        location /status {
            stub_status on;
            access_log off;            
        }
    
        ····
}
  1. 重启nginx 操作命令比较简单,请依照你的环境重启你的nginx即可。
  2. 打开status页面 在浏览器中输入nginx的地址:xxx.xxx.xxx.xxx/status,即可查看...
js 复制代码
Active connections: 4 
server accepts handled requests
 4 4 15 
Reading: 0 Writing: 1 Waiting: 3 

Active connections: 4 
表示Nginx正在处理的活动连接数4个。

server accepts handled requests
 4 4 15 
第一个server表示Nginx启动到现在共处理了4个连接
第二个accepts表示Nginx.启动到现在共成功创建4次握手
第三个handled requests表示总共处理了15次请求

Reading: 0 Writing: 1 Waiting: 3 
Reading:读取到客户端的Header信息数
Writing:返回给客户端Header信息数
Waiting:已经处理完正在等候下一次请求指令的驻留链接(开启keep-alive的情况下,这个值等于Active-(Reading+Writing)

7.nginx怎么看日志

1. nginx查看访问日志

在服务器部分或HTTP中使用access_log指令启用访问日志。

  1. 默认情况下,访问日志是在Nginx配置文件中定义的。因此,所有虚拟主机的访问日志将存储在同一配置文件中。
js 复制代码
http {
      ...
      #自定义访问日志中的格式
      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  /var/log/nginx/access.log;
      #关闭指令
      #access_log off
      ...
}
  1. 建议通过记录到新的单独文件中来分开所有虚拟主机的访问日志。
js 复制代码
http {
      ...
      ...
      #自定义访问日志中的格式
      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  /var/log/nginx/access.log;
   
         server {
                  listen 80;
                  Server_name example.com
                  access_log  /var/log/nginx/example.access.log;
                  ...
                  ...
                }
}

3.对nginx的配置进行所有更改后,重新加载nginx,然后运行tail命令

json 复制代码
vim /var/log/nginx/example.access.log

2. nginx查看错误日志

如果nginx突然停止运行或无法正常工作,它将在错误日志中记录所有事件。因此,使用错误日志,您可以找到更多详细信息。它还记录警告,但无法识别已发生的问题。

nginx错误日志的有不同的安全级别,可以在错误日志中使用以下安全级别: emerg:当系统不稳定时,用于紧急消息 alert:生成严重问题的警报消息。 crit:用于紧急情况下立即处理。 error:处理页面时,可能会发生错误。 warn:用于警告消息 notice:您也可以忽略的通知日志。 info:有关信息,消息 debug:指向用于调试信息的错误位置。

  1. 启用错误日志
json 复制代码
http {
       ...
       ...
       error_log  /var/log/nginx/error_log;
       #关闭指令
       #error_log off
    
       server {
                listen 80;
                server_name example1.com;
                    error_log  /var/log/nginx/example1.error_log  warn;
                        ...
       }
       server {
                listen 8081;
                server_name example2.com;
                    error_log  /var/log/nginx/example2.error_log  debug;
                        ...
   }
}
  1. nginx -t 检查一下Nginx是否有误,没报错后方可进行重启
json 复制代码
nginx -t 
  1. 重新加载nginx
json 复制代码
service nginx restart
  1. 然后运行页面 报错了直接进入错误日志中进行查看
js 复制代码
vim var/log/nginx/example1.error_log  
相关推荐
程序员JerrySUN19 分钟前
BitBake 执行流程深度解析:从理论到实践
linux·开发语言·嵌入式硬件·算法·架构
夜斗(dou)39 分钟前
谷歌开发者工具 - 网络篇
前端·网络·chrome devtools
常常不爱学习1 小时前
CSS盒子模型(溢出隐藏,块级元素和行级元素的居中对齐,元素样式重置)
前端·css
风抽过的烟头1 小时前
Python提取字符串中的json,时间,特定字符
前端·python·json
SomeB1oody1 小时前
【Rust自学】6.3. 控制流运算符-match
开发语言·前端·rust
Luke~~1 小时前
实验室服务器Ubuntu安装使用全流程
linux·运维·ubuntu
m0_748256781 小时前
【Django自学】Django入门:如何使用django开发一个web项目(非常详细)
前端·django·sqlite
hc_bmxxf2 小时前
Linux应用软件编程-多任务处理(线程)
linux·线程
林小白的日常2 小时前
uniapp中wx.getFuzzyLocation报错如何解决
前端·javascript·uni-app
傻小胖2 小时前
React 脚手架配置代理完整指南
前端·react.js·前端框架