Nginx官方发布“避免10大NGINX配置错误”中,推荐nginx.conf配置为:
http {   upstream node_backend {  zone upstreams 64K;  server 127.0.0.1:3000 max_fails=1 fail_timeout=2s;  keepalive 2;  }   server {  listen 80;  server_name example.com;   location / {  proxy_set_header Host $host;  proxy_pass http://node_backend/;  proxy_next_upstream error timeout http_500;   }  } } 即使没有负载平衡或在一台机器内,也要启用upstream{}块,它解锁了几个提高性能的功能:
 该zone指令建立了一个共享内存区域,主机上的所有 NGINX 工作进程都可以访问有关上游服务器的配置和状态信息。几个上游组可以共享该区域。 该server指令有几个参数可用于调整服务器行为。在这个例子中,我们改变了 NGINX 用来确定服务器不健康并因此没有资格接受请求的条件。在这里,如果通信尝试在每 2 秒内失败一次(而不是默认的每10 秒一次),它就会认为服务器不健康。 我们把这个设置和proxy_next_upstream指令结合起来,以配置NGINX认为的失败的通信尝试,在这种情况下,它把请求传递给上游组的下一个服务器。在默认的错误和超时条件中,我们添加了http_500,以便NGINX认为来自上游服务器的HTTP 500(内部服务器错误)代码代表一个失败的尝试。 keepalive指令设置每个工作进程的缓存中保存的与上游服务器的空闲keepalive连接的数量。默认情况下,NGINX 会为每个新的传入请求打开一个到上游(后端)服务器的新连接。这是安全但低效的,因为 NGINX 和服务器必须交换三个数据包来建立连接,并交换三个或四个数据包来终止它。在高流量时,为每个请求打开一个新连接会耗尽系统资源,并且根本无法打开连接。修复是在 NGINX 和上游服务器之间启用keepalive 连接——而不是在请求完成时关闭,连接保持打开状态以用于其他请求。这既减少了源端口用完的可能性,又提高了性能。该参数设置为块中列出的服务器数量的两倍。  
  
  
  
 
  
  
    规则:
$remote_addr ~* ^(.*)\.(.*)\.(.*)\.*[0268]$ 匹配末尾为0268这样的偶数ip,跳转到指定域名
$remote_addr ~* ^(112)\.(.*)\.(.*)\.(.*)$ 开头为 112 的 IP 跳转到指定的域名;
$http_x_forwarded_for ~* ^(112)\.(.*)\.(.*)\.(.*)$ 根据 forward 地址段来分流,开头为 112 的跳转到指定域名
例如:
server {  listen 8080; # 监听端口  server_name 10.0.0.1; # 监听地址   access_log /data/logs/nginx_logs/10.0.0.1.log main;   location / {  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  if ( $remote_addr ~* 10.0.0.2) { ## 请求ip为10.0.0.2的流量转发到下列地址  proxy_pass http://172.16.0.2:10000;  break;  }  if ( $remote_addr ~* ^(.*)\.(.*)\.(.*)\.*[0268]$) { ## 请求ip尾数为0268的ip转发到下列地址  proxy_pass http://172....
  
  
  
 
  
  
    一、nginx获取客户端真实IP、域名、协议、端口 需要在Nginx的配置文件nginx.conf中添加如下配置
proxy_set_header Host $http_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; 各参数的含义如下所示。
 Host包含客户端真实的域名和端口号; X-Forwarded-Proto表示客户端真实的协议(http还是https); X-Real-IP表示客户端真实的IP; X-Forwarded-For这个Header和X-Real-IP类似,但它在多层代理时会包含真实客户端及中间每个代理服务器的IP  二、nginx负载均衡配置 http {  ……  upstream real_server {  server 192.168.103.100:2001 weight=1; #轮询服务器和访问权重  server 192.168.103.100:2002 weight=2;  }   server {  listen 80;   location / {  proxy_pass http://real_server;  }  } } nginx负载均衡失败重试配置
upstream real_server {  server 192.168.103.100:2001 weight=1 max_fails=2 fail_timeout=60s;  server 192....
  
  
  
 
  
  
    #项目异常信息 org.apache.http.TruncatedChunkException: Truncated chunk ( expected size: 7752; actual size: 4077)  at org.apache.http.impl.io.ChunkedInputStream.read(ChunkedInputStream.java:186)  at org.apache.http.conn.EofSensorInputStream.read(EofSensorInputStream.java:138)  at <mypackage>.<MyServlet>.service(<MyServlet>.java:XXX)  at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)  at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)  at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)  at org.jboss.resteasy.plugins.server.servlet.FilterDispatcher.doFilter(FilterDispatcher.java:63)  at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)  at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)  at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)  at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)  at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)  at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)  at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)  at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)  at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)  at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602)  at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)  at java.lang.Thread.run(Thread.java:724) 当系统报以上错误时,接口表现出来的是数据传输不完整, 比如说接口返回 json , 那么接收到的数据可能会少一截,json 数据说不定会少个 } ,此时json就无法反序列化了。说白了就是丢包了。...
  
  
  
 
  
  
    前端发布完页面后,无法正常显示,console控制台报
在nginx配置文件中,增加header配置,有严格的顺序
 add_header Content-Security-Policy "default-src 'none' 域名 'unsafe-inline' 'unsafe-eval' blob: data: ;";  add_header X-Xss-Protection "1;mode=block";  add_header X-Content-Type-Options nosniff; 执行结果,页面正常显示
  
  
  
 
  
  
    一、Nginx安装 1、去官网http://nginx.org/下载对应的nginx包,推荐使用稳定版本 2、上传nginx到linux系统 3、安装依赖环境 (1)安装gcc环境
yum install gcc-c++ (2)安装PCRE库,用于解析正则表达式
yum install -y pcre pcre-devel (3)zlib压缩和解压缩依赖
yum install -y zlib zlib-devel (4)SSL 安全的加密的套接字协议层,用于HTTP安全传输,也就是https
yum install -y openssl openssl-devel 4、解压,需要注意,解压后得到的是源码,源码需要编译后才能安装 tar -zxvf nginx-1.16.1.tar.gz 5、编译之前,先创建nginx临时目录,如果不创建,在启动nginx的过程中会报错 mkdir /var/temp/nginx -p 6、在nginx目录,输入如下命令进行配置,目的是为了创建makefile文件 ./configure \  --prefix=/usr/local/nginx \  --pid-path=/var/run/nginx/nginx.pid \  --lock-path=/var/lock/nginx.lock \  --error-log-path=/var/log/nginx/error.log \  --http-log-path=/var/log/nginx/access.log \  --with-http_gzip_static_module \  --http-client-body-temp-path=/var/temp/nginx/client \  --http-proxy-temp-path=/var/temp/nginx/proxy \  --http-fastcgi-temp-path=/var/temp/nginx/fastcgi \  --http-uwsgi-temp-path=/var/temp/nginx/uwsgi \  --http-scgi-temp-path=/var/temp/nginx/scgi 注:代表在命令行中换行,用于提高可读性配置命令:...
  
  
  
 
  
  
    1. 安装密码生成工具 $ yum -y install httpd-tools 2. 生成用户和密码文件 生成用户和密码
$ htpasswd -c /usr/local/nginx/password username # 回车后输入密码 # -c 创建一个加密文件 查看生成的用户和密码
如果要修改密码,或者删除密码,请参考下面操作
删除用户和密码
$ htpasswd -D /usr/local/nginx/password username # -D 删除指定的用户 修改用户和密码
$ htpasswd -D /usr/local/nginx/password username $ htpasswd -b /usr/local/nginx/password username pass # -D 删除指定的用户 # -b htpassswd命令行中一并输入用户名和密码而不是根据提示输入密码 # -p htpassswd命令不对密码进行进行加密,即明文密码 3. 配置Nginx认证 找到 nginx 配置文件,通常默认的配置文件在/usr/local/nginx/conf/nginx.conf,要对整个站点开启验证,需在配置文件中的server加上认证配置 auth_basic 和 auth_basic_user_file
server {  listen 80;  server_name localhost;  # ....