Skip to content

nginx

nginx 正向代理

  • 代理的用户请求,和用户请求方向一致,叫做正向代理。

正向代理

nginx 反向代理

  • 代理是代理服务器处理用户请求,和用户请求方向相反,叫做反向代理。 反向代理

nginx 全局设置优化

  • worker_processes 用来设置 Nginx 服务的进程数。推荐是 CPU 内核数或者内核数的倍数,推荐使用 CPU 内核数

    worker_processes 4;

  • 默认情况下,Nginx 的多个进程有可能跑在某一个 CPU 或 CPU 的某一核上,导致 Nginx 进程使用硬件的资源不均

    worker_cpu_affinity 0001 0010 0100 1000;

  • 设置一个进程理论允许的最大连接数,理论上越大越好,但不可以超过 worker_rlimit_nofile 的值

    worker_rlimit_nofile 200000;

查看服务器最大可以打开文件的数量

js
ulimit -a 查看

ulimit -n 300000  更改

升级 http2

  • 1、nginx 的版本必须在 1.9.5 以上
  • 2、openssl 的版本必须在 1.0.2e 及以上
js
server {
listen 443 ssl http2;
}

nginx 模块

js
#nginx进程数,建议设置为等于CPU总核心数
worker_processes  1;

#全局错误日志定义类型,[ debug | info | notice | warn | error | crit ]
#error_log  logs/error.log;

# 一个nginx进程打开的最多文件
worker_rlimit_nofile 65535;

#工作模式与连接数上限
events {
   # 单个进程最大连接数(最大连接数=连接数*进程数)该值受系统进程最大打开文件数限制,需要使用命令ulimit -n 查看当前设置
   worker_connections 65535;
}

#设定http服务器
http {

    #长连接超时时间,单位是秒,默认为0
    keepalive_timeout  65;

    # gzip压缩功能设置
    gzip on; #开启gzip压缩输出
    gzip_comp_level 6; #压缩等级
    gzip_types application/javascript # 类型不配置不生效




    # http_proxy服务全局设置
    client_max_body_size   10m;


   # 设定负载均衡后台服务器列表
    upstream  backend.com  {
        server   192.168.10.100:8080 max_fails=2 fail_timeout=30s ;
        server   192.168.10.101:8080 max_fails=2 fail_timeout=30s ;
    }

    #虚拟主机的配置
    server {
        #监听端口
        listen       80;
        #域名可以有多个,用空格隔开
        server_name  localhost fontend.com;

        #代理
        location / {
          proxy_pass http://127.0.0.1:3000;
      }

       # 图片缓存时间设置
       location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$ {
          expires 10d;
       }

       # JS和CSS缓存时间设置
       location ~ .*.(js|css)?$ {
          expires 1h;
       }
}

CORS 分类(简单请求和非简单请求)

简单请求

  • 1、请求方法是以下三种方法之一:HEAD GET POST

  • 2、HTTP的头信息不超出以下几种字段:

    Accept

    Accept-Language

    Content-Language

    Last-Event-ID

    Content-Type:只限于三个值application/x-www-form-urlencodedmultipart/form-datatext/plain

非简单请求

  • 非简单请求是那种对服务器有特殊要求的请求,比如请求方法是PUT、DELETE或OPTIONS,或者Content-Type字段的类型是application/json。

  • 对于非简单 CORS 请求会有一个预检机制,预捡的请求方法是 OPTIONS,如果不做处理状态码会返回 403 或者 405,我们需要在 nginx 对 OPTIONS 方法进行处理让状态码返回 200

CORS 配置

js
location / {
   add_header 'Access-Control-Allow-Origin' '*';// 跨域白名单
   add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, PUT, DELETE';
   add_header 'Access-Control-Allow-Headers' 'Content-Type';
   # 处理非简单请求
   if ($request_method = 'OPTIONS') {
      return 200;
   }
}

nginx 基础配置

js
user  nginx;
worker_processes  4;



include /usr/share/nginx/modules/mod-stream.conf;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
    server_tokens       off;
    proxy_intercept_errors on; 

   #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
   #                  '$status $body_bytes_sent "$http_referer" '
   #                  '"$http_user_agent" "$http_x_forwarded_for"';

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for" '
                      '"$http_host" "$upstream_addr" "$upstream_status" "$upstream_response_time" "$request_time"';

    access_log  /var/log/nginx/access.log  main;
    client_max_body_size 100m;
    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

   #large_client_header_buffers  4 1m;

    include /etc/nginx/conf.d/*.conf;
    limit_req_zone $binary_remote_addr zone=myRateLimit:10m rate=10r/s;
}

stream {

    log_format  basic   '$time_iso8601 $remote_addr '
                        '$protocol $status $bytes_sent $bytes_received '
                        '$session_time $upstream_addr '
                        '"$upstream_bytes_sent" "$upstream_bytes_received" "$upstream_connect_time"';

    access_log      /var/log/nginx/stream.log  basic buffer=1k flush=5s;

    include /etc/nginx/conf.d/*.tcp;

}

静态资料配置

js
server {
        listen       50080;
        server_name  localhost;

		#charset koi8-r;
		#access_log  logs/host.access.log;
        
		
        location /internet_payment_account {
                alias  /usr/share/nginx/html/frontapp/internet_payment_account/dist;
                index  index.html index.htm;
                try_files $uri $uri/ /internet_payment_account/index.html;
        }
        
        location /ipa-bizcenter/api {
                client_max_body_size 50m;
                proxy_pass http://10.123.78.82:8001/ipa-bizcenter;
        }                      
}