nginx-1.18.0安装部署(包含常用配置文件讲解)

软件简介

官网描述:
nginx 是HTTP和反向代理服务器,邮件代理服务器和通用TCP / UDP代理服务器,最初由Igor Sysoev编写。
官方测试nginx能够支支撑5万并发链接,并且cpu、内存等资源消耗却非常低,运行非常稳定。

应用场景:
1、http服务器。Nginx是一个http服务可以独立提供http服务。可以做网页静态服务器。
2、虚拟主机。可以实现在一台服务器虚拟出多个网站。例如个人网站使用的虚拟主机。
3、反向代理,负载均衡。当网站的访问量达到一定程度后,单台服务器不能满足用户的请求时,
需要用多台服务器集群可以使用nginx做反向代理。并且多台服务器可以平均分担负载,
不会因为某台服务器负载高宕机而某台服务器闲置的情况。

下载地址

http://nginx.org/en/download.html
官网提供三种版本:

Nginx官网提供了三个类型的版本
Mainline version:Mainline 是 Nginx 目前主力在做的版本,可以说是开发版
Stable version:最新稳定版,生产环境上建议使用的版本
Legacy versions:遗留的老版本的稳定版。

点击版本号,即可下载。
在这里插入图片描述

安装部署

环境准备

  • PCRE(Perl Compatible Regular Expressions)是一个Perl库,包括 perl 兼容的正则表达式库。
    nginx的http模块使用pcre来解析正则表达式,所以需要在linux上安装pcre库。
    注:pcre-devel是使用pcre开发的一个二次开发库。nginx也需要此库。
  • zlib库提供了很多种压缩和解压缩的方式,nginx使用zlib对http包的内容进行gzip,所以需要在linux上安装zlib库。
  • OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。nginx不仅支持http协议,还支持https(即在ssl协议上传输http),所以需要在linux安装openssl库。
yum install gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel -y

编译安装

#创建nginx用户,用于启动nginx
useradd -s /sbin/nologin nginx
#解压nginx安装包,并进入解压目录
tar xf nginx-1.18.0.tar.gz
cd nginx-1.18.0
#编译nginx,指定启动用户为nginx,安装路径为/usr/local/nginx,编译参数下面有详解
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --with-http_ssl_module --with-stream --without-http_ssi_module --without-http_autoindex_module
#安装nginx
make && make install
#给目录授权
chown -R nginx:nginx /usr/local/nginx
#设置nginx启动命令为系统命令
echo 'PATH=$PATH:/usr/local/nginx/sbin/' >> /etc/profile
#使命令生效
source /etc/profile
#启动nginx
nginx
#虽然指定了nginx用户启动,还是需要用root启动的,因为master进程是root启的,work进程才是nginx用户,上面编译安装的时候指定了nginx用户,即使配置文件里没有指定,在nginx命令里已经指定用户了的,但是配置文件如果配置了其他用户,配置文件的优先级更高。

nginx编译参数:讲不完,兄弟们,有心思的就去看了,干货已经给了!!不想看的就按照我上面的去吧,哈哈

--prefix= 指向安装目录。
--sbin-path= 指定执行程序文件存放位置。
--modules-path= 指定第三方模块的存放路径。
--conf-path= 指定配置文件存放位置。
--error-log-path= 指定错误日志存放位置。
--pid-path= 指定pid文件存放位置。
--lock-path= 指定lock文件存放位置。
--user= 指定程序运行时的非特权用户。
--group= 指定程序运行时的非特权用户组。
--builddir= 指向编译目录。
--with-rtsig_module 启用rtsig模块支持。
--with-select_module 启用select模块支持,一种轮询处理方式,不推荐在高并发环境中使用,禁用:--without-select_module。
--with-poll_module 启用poll模块支持,功能与select相同,不推荐在高并发环境中使用。
--with-threads启用thread pool支持。
--with-file-aio 启用file aio支持。
--with-http_ssl_module 启用https支持。
--with-http_v2_module 启用ngx_http_v2_module支持。
--with-ipv6 启用ipv6支持。
--with-http_realip_module 允许从请求报文头中更改客户端的ip地址,默认为关。
--with-http_addition_module 启用ngix_http_additon_mdoule支持(作为一个输出过滤器,分部分响应请求)。
--with -http_xslt_module 启用ngx_http_xslt_module支持,过滤转换XML请求 。
--with-http_image_filter_mdoule 启用ngx_http_image_filter_module支持,传输JPEG\GIF\PNG图片的一个过滤器,默认不启用,需要安装gd库。
--with-http_geoip_module 启用ngx_http_geoip_module支持,用于创建基于MaxMind GeoIP二进制文件相配的客户端IP地址的ngx_http_geoip_module变量。
--with-http_sub_module 启用ngx_http_sub_module支持,允许用一些其他文本替换nginx响应中的一些文本。
--with-http_dav_module 启用ngx_http_dav_module支持,增加PUT、DELETE、MKCOL创建集合,COPY和MOVE方法,默认为关闭,需要编译开启。
--with-http_flv_module 启用ngx_http_flv_module支持,提供寻求内存使用基于时间的偏移量文件。
--with-http_mp4_module 启用ngx_http_mp4_module支持,启用对mp4类视频文件的支持。
--with-http_gzip_static_module 启用ngx_http_gzip_static_module支持,支持在线实时压缩输出数据流。
--with-http_random_index_module 启用ngx_http_random_index_module支持,从目录中随机挑选一个目录索引。
--with-http_secure_link_module 启用ngx_http_secure_link_module支持,计算和检查要求所需的安全链接网址。
--with-http_degradation_module 启用ngx_http_degradation_module 支持允许在内存不足的情况下返回204或444代码。
--with-http_stub_status_module 启用ngx_http_stub_status_module 支持查看nginx的状态页。
--without-http_charset_module 禁用ngx_http_charset_module这一模块,可以进行字符集间的转换,从其它字符转换成UTF-8或者从UTF8转换成其它字符。它只能从服务器到客户端方向,只有一个字节的字符可以转换。
--without-http_gzip_module 禁用ngx_http_gzip_module支持,同--with-http_gzip_static_module功能一样。
--without-http_ssi_module 禁用ngx_http_ssi_module支持,提供了一个在输入端处理服务器包含文件(SSI)的过滤器。
--without-http_userid_module 禁用ngx_http_userid_module支持,该模块用来确定客户端后续请求的cookies。
--without-http_access_module 禁用ngx_http_access_module支持,提供了基于主机ip地址的访问控制功能。
--without-http_auth_basic_module 禁用ngx_http_auth_basic_module支持,可以使用用户名和密码认证的方式来对站点或部分内容进行认证。
--without-http_autoindex_module 禁用ngx_http_authindex_module,该模块用于在ngx_http_index_module模块没有找到索引文件时发出请求,用于自动生成目录列表。
--without-http_geo_module 禁用ngx_http_geo_module支持,这个模块用于创建依赖于客户端ip的变量。
--without-http_map_module 禁用ngx_http_map_module支持,使用任意的键、值 对设置配置变量。
--without-http_split_clients_module 禁用ngx_http_split_clients_module支持,该模块用于基于用户ip地址、报头、cookies划分用户。
--without-http_referer_module 禁用ngx_http_referer_modlue支持,该模块用来过滤请求,报头中Referer值不正确的请求。
--without-http_rewrite_module 禁用ngx_http_rewrite_module支持。该模块允许使用正则表达式改变URI,并且根据变量来转向以及选择配置。如果在server级别设置该选项,那么将在location之前生效,但如果location中还有更进一步的重写规则,location部分的规则依然会被执行。如果这个URI重写是因为location部分的规则造成的,那么location部分会再次被执行作为新的URI,这个循环会被执行10次,最后返回一个500错误。
--without-http_proxy_module 禁用ngx_http_proxy_module支持,http代理功能。
--without-http_fastcgi_module 禁用ngx_http_fastcgi_module支持,该模块允许nginx与fastcgi进程交互,并通过传递参数来控制fastcgi进程工作。
--without-http_uwsgi_module 禁用ngx_http_uwsgi_module支持,该模块用来使用uwsgi协议,uwsgi服务器相关。
--without-http_scgi_module 禁用ngx_http_scgi_module支持,类似于fastcgi,也是应用程序与http服务的接口标准。
--without-http_memcached_module 禁用ngx_http_memcached支持,用来提供简单的缓存,提高系统效率。
--without-http_limit_conn_module 禁用ngx_http_limit_conn_module支持,该模块可以根据条件进行会话的并发连接数进行限制。
--without-http_limit_req_module 禁用ngx_limit_req_module支持,该模块可以实现对于一个地址进行请求数量的限制。
--without-http_empty_gif_module 禁用ngx_http_empty_gif_module支持,该模块在内存中常驻了一个1*1的透明gif图像,可以被非常快速的调用。
--without-http_browser_module 禁用ngx_http_browser_mdoule支持,创建依赖于请求报头的值 。如果浏览器为modern,则$modern_browser等于modern_browser_value的值;如果浏览器为old,则$ancient_browser等于$ancient_browser_value指令分配的值;如果浏览器为MSIE,则$msie等于1。
--without-http_upstream_ip_hash_module 禁用ngx_http_upstream_ip_hash_module支持,该模块用于简单的负载均衡。
--with-http_perl_module 启用ngx_http_perl_module支持,它使nginx可以直接使用perl或通过ssi调用perl。
--with-perl_modules_path= 设定perl模块路径
--with-perl= 设定perl库文件路径
--http-log-path= 设定access log路径
--http-client-body-temp-path= 设定http客户端请求临时文件路径
--http-proxy-temp-path= 设定http代理临时文件路径
--http-fastcgi-temp-path= 设定http fastcgi临时文件路径
--http-uwsgi-temp-path= 设定http scgi临时文件路径
--http-scgi-temp-path= 设定http scgi临时文件路径
--without-http 禁用http server功能
--without-http-cache 禁用http cache功能
--with-mail 启用POP3、IMAP4、SMTP代理模块
--with-mail_ssl_module 启用ngx_mail_ssl_module支持
--without-mail_pop3_module 禁用pop3协议。
--without-mail_iamp_module 禁用iamp协议。
--without-mail_smtp_module 禁用smtp协议。
--with-google_perftools_module 启用ngx_google_perftools_mdoule支持,调试用,可以用来分析程序性能瓶颈。
--with-cpp_test_module 启用ngx_cpp_test_module支持。
--add-module= 指定外部模块路径,启用对外部模块的支持。
--with-cc= 指向C编译器路径。
--with-cpp= 指向C预处理路径。
--with-cc-opt= 设置C编译器参数,指定--with-cc-opt="-I /usr/lcal/include",如果使用select()函数,还需要同时指定文件描述符数量--with-cc-opt="-D FD_SETSIZE=2048"。 (PCRE库)
--with-ld-opt= 设置连接文件参数,需要指定--with-ld-opt="-L /usr/local/lib"。(PCRE库)
--with-cpu-opt= 指定编译的CPU类型,如pentium,pentiumpro,...amd64,ppc64...
--without-pcre 禁用pcre库。
--with-pcre 启用pcre库。
--with-pcre= 指向pcre库文件目录。
--with-pcre-opt= 在编译时为pcre库设置附加参数 。
--with-md5= 指向md5库文件目录。
--with-md5-opt= 编译时为md5库设置附加参数。
--with-md5-asm 使用md5汇编源。
--with-sha1= 指向sha1库文件目录。
--with-sha1-opt= 编译时为sha1库设置附加参数。
--with-sha1-asm 使用sha1汇编源。
--with-zlib= 指向zlib库文件目录。
--with-zlib-opt= 在编译时为zlib设置附加参数。
--with-zlib-asm= 为指定的CPU使用汇编源进行优化。
--with-libatomic 为原子内存的更新操作的实现提供一个架构。
--with-libatomic= 指向libatomic_ops的安装目录。
--with-openssl= 指向openssl安装目录。
--with-openssl-opt= 在编译时为openssl设置附加参数。
--with-debug 启用debug日志。

配置文件

nginx的负载均衡和反向代理:
简单点来说,负载均衡就是upstream,反向代理就是location,反向代理里面可以套用负载均衡。

nginx.conf详解

  1. 全局块:配置影响nginx全局的指令。一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等。
  2. events块:配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。
  3. http块:可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。
  4. server块:配置虚拟主机的相关参数,一个http中可以有多个server。
  5. location块:配置请求的路由,以及各种页面的处理情况。

一般按照我的规范,默认的nginx.conf文件里面,不配置sever块和upstream块,只存放通用的配置,采用【include conf.d/*.conf;】配置,加载当前目录下的conf.d目录下的*.conf文件,这样在有多个server块的情况下,便于管理。

模板举例:

user nginx;#nginx使用什么用户启动
worker_processes  4;#启动设置4个work线程,默认一个,根据cpu核数
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;#指定日志路径,级别。这个设置可以放入全局块,http块,server块,级别以此为:debug|info|notice|warn|error|crit|alert|emerg
#pid        logs/nginx.pid;#指定pid文件路径,默认即可


events {
    worker_connections  65535;#设置最大连接数,默认1024,跟操作系统ulimit有关
    use epoll;#事件驱动模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport
}


http {
    include       mime.types; #文件扩展名与文件类型映射表
    default_type  application/octet-stream; #默认文件类型,默认为text/plain
    
    client_body_buffer_size    40M;#在上传下载文件的时候缓冲区大小,如果图片或者文件大于这个值,就会报500,在不确定上传下载文件大小的时候,尽量设置大一点。
    client_max_body_size      100M;#设定通过nginx上传文件的大小
    client_header_buffer_size 1M;#客户端请求头部的缓冲区大小
    large_client_header_buffers 4 1M;#客户请求头缓冲大小。nginx默认会用client_header_buffer_size这个buffer来读取header值,如果header过大,它会使用large_client_header_buffers来读取。
	
    #open_file_cache   max=2000   inactive=20s;#这个将为打开文件指定缓存,默认是没有启用的,max指定缓存数量,建议和打开文件数一致,inactive是指经过多长时间文件没被请求后删除缓存。
    #open_file_cache_valid       60s;#这个是指多长时间检查一次缓存的有效信息。
    #open_file_cache_min_uses   5;#open_file_cache指令中的inactive参数时间内文件的最少使用次数,如果超过这个数字,文件描述符一直是在缓存中打开的,如上例,如果有一个文件在inactive时间内一次没被使用,它将被移除。
    #open_file_cache_errors      off;#指定是否在搜索一个文件是记录cache错误.
    
    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;#设置日志存放路径和存放日志类型

    sendfile        on;#允许sendfile方式传输文件,默认为off,可以在http块,server块,location块。
	
    server_tokens off;#隐藏nginx版本号
    #tcp_nopush     on;#允许或禁止使用socke的TCP_CORK的选项,此选项仅在使用sendfile的时候使用
    keepalive_timeout  1000;#连接超时时间,默认为75s,可以在http,server,location块。
    #是否开启gzip
    gzip  on;
#文件低于该值不压缩
    gzip_min_length 1K;
#缓冲(压缩在内存中缓冲几块? 每块多大?)
    gzip_buffers 4 16M;
#推荐6 压缩级别(级别越高,压的越小,越浪费CPU计算资源)
    gzip_comp_level 1;
# 对哪些类型的文件用压缩 如txt,xml,html ,css
    gzip_types text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;    gzip_vary off;
#正则匹配UA 什么样的Uri不进行gzip
    gzip_disable "MSIE [1-6]\.";

    include       conf.d/*.conf;#引用其他目录的配置文件
}

conf.d/*.conf配置讲解(server块)

这个里面主要配置upstream和location,模板示例如下:

#########ip和端口的配置,全部写在upstream里面,后面的proxy_pass全部调用upstream
	#登录服务
        upstream auth_tomcat {
     			#ip_hash;#设置负载方式,nginx负载方式有很多,需要按要求设置。不设置就是轮询。
                server 192.168.1.3:7001 weight=1;#设置权重,权重越大负载概率越高
                server 192.168.1.4:7001 weight=9;
        }
	#日志服务
        upstream logs_tomcat {
                server 192.168.1.3:7002 weight=1;
                server 192.168.1.4:7002 weight=9;
        }

    server {
        listen       8000;#此server的监听端口,一个nginx可以有多个server
        server_name  localhost;#服务名,也可以说是监听地址
		
	# html目录
	root /data/qianduan;#站点目录,前端代码文件目录
		
	error_page 405 =200 @405;#错误页面
	location @405 {
		root /data/qianduan;#站点目录,前端代码文件目录
		proxy_method GET;#请求的类型为GET时生效
		proxy_pass http://static_backend;#符合要求后重定向到该地址
	}

	location /gmp/pc/psp/psp-equipment-load-analysis {
		 rewrite ^/gmp/pc/psp/psp-equipment-load-analysis/(.*)$  /api/DINGXIN/plan_situationanalysis_new/$1 last;#截取前端地址为前面的时候,强行转发到后面的地址
	}

	location /logs/ {	#匹配url为/plan_question后,进行操作
          	root   html;#摆设,其实可以不写
        	index  index.html index.htm;#默认索引,不是登录页那种几乎也是摆设
        	proxy_set_header X-Real-IP $remote_addr;#打印转发日志格式,获取用户客户端IP
        	proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;#把用户真实IP封装到报文X-Forwarded-For中,后面的机器也能知道用户真实的IP,多重转发更复杂,可以看下面的举例说明。
        	proxy_read_timeout 1200s;#连接成功后_等候后端服务器响应时间_其实已经进入后端的排队之中等候处理(也可以说是后端服务器处理请求的时间),默认60S
        	proxy_send_timeout 1200s;#后端服务器数据回传时间_就是在规定时间之内后端服务器必须传完所有的数据,默认60S
        	proxy_set_header Host $http_host;#把nginx端的ip写进请求的Host里。
        	proxy_set_header X-NginX-Proxy true;
        	proxy_pass "http://logs_tomcat/logs";
         	proxy_redirect off;#修改返回给客户端的location的真是地址,关了就是
         }
		location /api/auth/ {
			proxy_set_header X-Real-IP $remote_addr;
			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
			proxy_set_header Host $http_host;
			proxy_set_header X-NginX-Proxy true;
			client_max_body_size 10m;
			client_body_buffer_size 128k;
			proxy_connect_timeout 1200s;
			proxy_read_timeout 1200s;
			proxy_send_timeout 1200s;
			proxy_buffers 16 512k;
			proxy_buffer_size 512k;
			proxy_pass "http://auth_tomcat/auth";
			proxy_redirect off;
		  }
        location /api/logs/ {
          	root   html;
          	index  index.html index.htm;
          	proxy_set_header X-Real-IP $remote_addr;
          	proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          	proxy_read_timeout 1200s;
          	proxy_send_timeout 1200s;
          	proxy_set_header Host $http_host;
          	proxy_set_header X-NginX-Proxy true;
          	proxy_pass "http://logs_tomcat/logs";
          	proxy_redirect off;
         }
    }

upstream负载方式

upstream是Nginx的HTTP Upstream模块,这个模块通过一个简单的调度算法来实现客户端IP到后端服务器的负载均衡。
在上面的设定中,通过upstream指令指定了一个负载均衡器的名称。这个名称可以任意指定,在后面需要的地方直接调用即可。

Nginx的负载均衡模块目前支持4种调度算法,下面进行分别介绍,其中后两项属于第三方的调度方法。

轮询(默认):每个请求按时间顺序逐一分配到不同的后端服务器,如果后端某台服务器宕机,故障系统被自动剔除,使用户访问不受影响;
Weight:指定轮询权值,Weight值越大,分配到的访问机率越高,主要用于后端每个服务器性能不均的情况下;
ip_hash:每个请求按访问IP的hash结果分配,这样来自同一个IP的访客固定访问一个后端服务器,有效解决了动态网页存在的session共享问题;
fair:比上面两个更加智能的负载均衡算法。此种算法可以依据页面大小和加载时间长短智能地进行负载均衡,也就是根据后端服务器的响应时间来分配请求,响应时间短的优先分配。Nginx本身是不支持fair的,如果需要使用这种调度算法,必须下载Nginx的upstream_fair模块;
url_hash:按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,可以进一步提高后端缓存服务器的效率。Nginx本身是不支持url_hash的,如果需要使用这种调度算法,必须安装Nginx 的hash软件包。
在HTTP Upstream模块中,可以通过server指令指定后端服务器的IP地址和端口,同时还可以设定每个后端服务器在负载均衡调度中的状态。常用的状态有:

down:表示当前的server暂时不参与负载均衡;
backup:预留的备份机器。当其他所有的非backup机器出现故障或者忙的时候,才会请求backup机器,因此这台机器的压力最轻;
max_fails:允许请求失败的次数,默认为1。当超过最大次数时,返回proxy_next_upstream 模块定义的错误;
fail_timeout:在经历了max_fails次失败后,暂停服务的时间。max_fails可以和fail_timeout一起使用。
注意,当负载调度算法为ip_hash时,后端服务器在负载均衡调度中的状态不能是weight和backup。

举例说明proxy_set_header 参数

假设我电脑的IP是192.168.1.1,我的nginx配置如下,去掉无关配置。

        upstream logs_tomcat {
                server 192.168.1.3:7002;
        }
    server {
        listen       8000;
        server_name  192.168.1.2;
		# html目录
		root /data/qianduan;
		
        location /api/logs {
          	proxy_set_header X-Real-IP $remote_addr;
          	proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          	proxy_set_header Host $proxy_host;
          	proxy_set_header X-NginX-Proxy true;
          	proxy_pass "http://logs_tomcat/logs";
          	proxy_redirect off;
         }

配置解析

一、X-Real-IP
是指客户端的真实IP,如果设置了$remote_addr这个值,后端服务器就能获取到客户端的真实IP,也就是此例中的192.168.1.1

二、Host
host的值设置为$proxy_host,是指proxy_pass中设置的host值,也就是192.168.1.3,也就是后端服务器的IP地址。
若客户端发过来的请求header中有HOST这个字段,$http_host和$host表示的就是原始请求host,比如请求的时候HOST的值是http://test.com,那么反代后还是http://test.com。
若客户端发过来的请求header中没有HOST这个字段,$host表示nginx代理服务器的地址,也就是此例中的192.168.1.2,设置为$proxy_host的话就是192.168.1.3。
$http_host不是一个固定的变量,他其实是$http_HEADER通配后的结果,这里的HEADER是一个通配符,通配的是请求头里的header属性,例如$http_content_type表示请求头里content-type属性的值,同理,$http_host指的就是请求头里的host属性。

三、X-Forwarded-For
这个变量的值有$proxy_add_x_forwarded_for和$remote_addr,在只有一个代理服务器的转发的情况下,两者的效果貌似差不多,都可以真实的显示出客户端原始ip。在有多个代理服务器的情况下,会把客户端原始IP放到请求头里,保持后面的代理服务器也知道客户端原始IP。

举例说明,用户A的IP是192.168.1.1,请求一个经过两次nginx转发的应用,在第一台nginx中(192.168.1.2),配置如下:

proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
现在$proxy_add_x_forwarded_for变量的"X-Forwarded-For"部分是空的,所以只有$remote_addr,而$remote_addr的值是用户的ip,那么X-Forwarded-For变量的值就是用户的ip:192.168.1.1。

到第二台nginx,配置如下:

proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
现在的$proxy_add_x_forwarded_for变量,X-Forwarded-For部分包含的是用户的真实ip,$remote_addr部分的值是上一台nginx的ip地址,那么X-Forwarded-For的值就变成了"用户的真实ip,第一台nginx的ip",也就是“192.168.1.1, 192.168.1.2”

所以还是建议X-Forwarded-For的值设置成$proxy_add_x_forwarded_for。

安全加固类

添加在server {}内。

		#会限制所有的外部资源,都只能从当前域名加载,其中default-src定义针对所有类型资源的默认加载策略,self允许来自相同来源的内容
        add_header Content-Security-Policy "default-src 'self' localhost:8088 'unsafe-inline' 'unsafe-eval' blob: data: ;";
        #表示启用XSS过滤(禁用过滤为X-XSS-Protection: 0),mode=block表示若检查到XSS攻击则停止渲染页面
        add_header X-Xss-Protection "1;mode=block";
        #响应头用来指定浏览器对未指定或错误指定Content-Type资源真正类型的猜测行为,nosniff 表示不允许任何猜测。通过将此标头添加到网页的HTTP响应中, 可以防止MIME类型的安全风险。具有此标头可指示浏览器将文件类型视为已定义, 并禁止内容嗅探。你只需添加” nosniff”一个参数。
        add_header X-Content-Type-Options nosniff;
        #仅在发生跨域访问时发送只包含host的Referrer,同域下还是完整的。
        add_header  Referrer-Policy  "origin-when-crossorigin";
        #发送只包含host部分的 Referrer。启用这个规则,无论是否发生协议降级,无论是本站链接还是站外链接,都会发送 Referrer信息,但是只包含协议+host部分(不包含具体的路径及参数等信息)。
        add_header 'Referrer-Policy' 'origin';
        #论是否发生协议降级,无论是本站链接还是站外链接,统统都发送 Referrer 信息。正如其名,这是最宽松而最不安全的策略;
        add_header 'Referrer-Policy' 'unsafe-url';
        #用于控制浏览器下载文件是否支持直接打开,如果支持直接打开,可能会有安全隐患。源文件相同可以打开。
        add_header X-Download-Options SAMEORIGIN;
        #HSTS(HTTP Strict Transport Security性)标头, 以确保来自浏览器的所有通信均通过HTTPS(HTTP安全)发送。这样可以防止HTTPS点击提示, 并将HTTP请求重定向到HTTPS。当用户第一次访问后,会返回一个包含了Strict-Transport-Security响应头的字段,这个字段会告诉浏览器,在接下来的31536000秒内,当前网站的所有请求都使用https协议访问,参数includeSubDomains是可选的,表示所有子域名也将采用同样的规则。
        add_header Strict-Transport-Security max-age=31536000;
        #使用Adobe产品(例如PDF, Flash等)?你可以实现此标头, 以指示浏览器如何处理跨域请求。通过实现此标头, 你可以限制从其他域加载网站的资产, 以避免资源滥用。none不允许任何策略。
        add_header X-Permitted-Cross-Domain-Policies none;
  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

唯何

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值