本文共 6268 字,大约阅读时间需要 20 分钟。
代码段粘贴过来(由于前面整体的配置文件中么有upstream的配置内容,我重新复制了一个过来)。
upstream app { ip_hash; server 192.168.1.1:8080; server 192.168.1.2:8080; server 192.168.1.3:8080; server 192.168.1.4:8080; } server { listen 81; server_name skyfans.app.com; charset utf-8; location / { proxy_pass http://app; proxy_set_header Host $host:$server_port; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } }include ./conf.d/*.conf; # another virtual host using mix of IP-, name-, and port-based configuration # #server { # listen 8000; # listen somename:8080; # server_name somename alias another.alias; # location / { # root html; # index index.html index.htm; # } #} # HTTPS server # #server { # listen 443 ssl; # server_name localhost; # ssl_certificate cert.pem; # ssl_certificate_key cert.key; # ssl_session_cache shared:SSL:1m; # ssl_session_timeout 5m; # ssl_ciphers HIGH:!aNULL:!MD5; # ssl_prefer_server_ciphers on; # location / { # root html; # index index.html index.htm; # } #}
定义上游服务器集群,在反向代理中proxy_pass使用,用于负载均衡的配置。
upstream app { ip_hash; server 192.168.1.1:8080; server 192.168.1.2:8080; server 192.168.1.3:8080; server 192.168.1.4:8080; include ./conf.d/*.conf; }
app为用户自定义的名称(定义的内容建议和应用对应,方便区分),注意记录定义的名字,因为在后面的server中需要配合调用。
负载均衡配置算法,主要算法包括轮训、ip_hash、weight、第三方。这里不做详细介绍,想详细了解可飞机去:
所代理的IP地址及端口内容。
引入加载./conf.d/下的所有conf结尾的配置文件。
server { listen 81; server_name skyfans.app.com; charset utf-8; location /{ …… } error_page 500 502 503 504 /50x.html; location = /50x.html { root html;}
代理后监听的端口。按如上配置举例说明,原存放服务的内容监听端口为8080,通过server块配置后,端口被代理为了81,我们在访问服务的时候,端口输入81即可成功访问到应用。
server_name用于与在浏览器或程序方式时,进行http请求header头部的Host匹配,如果配置为指定的URL,则访问时完全配置UR内容。
注意:server_name后面可跟多个主机名,也可使用通匹符配置,如*.app.com。
字符集配置。
location匹配模块内容,若果上面的location匹配不到对应的地址或获取的状态码为500 502 503 504时,则反回ningx默认设置的50x.html
location / { proxy_pass http://app; proxy_set_header Host $host:$server_port; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }
location作用:基于一个指令设置URI。location是根据Uri来进行不同的定位,location可以把平台的不同部分,定位到不同的URL上。一般在配置时,不同的模块会分多个location进行配置,方便区分及修改配置。
= 精确匹配,如果找到匹配=号的内容,立即停止搜索,并立即处理请求(优先级最高)
~ 区分大小写
~* 不区分大小写
^~ 只匹配字符串,不匹配正则表达式
@ 指定一个命名的location,一般用于内部重定义请求,location @name {…}
当路径为/时,通常会返回首页,也就是location中配置的URL地址页。
location = / { [ configuration A ]}location / { [ configuration B ]}location /documents/ { [ configuration C ]}location ^~ /images/ { [ configuration D ]}location ~* \.(gif|jpg|jpeg)$ { [ configuration E ]}
/ 匹配A(完全匹配)。
/index.html 匹配B(配置的URL地址)
/documents/document.html 匹配C(匹配documents下的内容)
/images/1.gif 匹配D
/documents/1.jpg 匹配的是E。
proxy_pass 指令属于ngx_http_proxy_module 模块,此模块可以将请求转发到另一台服务器。上面说过,我们在配置upstream模块时,定义了一个app的负载均衡的内容,在如上定义的内容,我们需要在location模块中调用,实现求情转发的工作。
proxy_set_header Host h o s t : host: host:server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
nginx将记录用户真实的ip地址转发给后端服务器配置。
这里的 h o s t 和 host和 host和remote_addr都是nginx的导出变量,可以再配置文件中直接使用。这里使用用 h o s t 代 替 host代替 host代替http_host变量,从而避免http请求中丢失Host头部的情况下Host不被重写的失误。
注意:这段配置内容也可以有效的防止伪Ip攻击,通过如上配置,可以记录真实的访问IP地址。
依赖模块:http_ssl_module。默认安装nginx不会自带,编译的时候需要加上with -http_ssl_module内容。
#HTTPS server # server { listen 443 ssl; server_name localhost; ssl_certificate cert.pem; ssl_certificate_key cert.key; ssl_session_cache shared:SSL:1m; ssl_session_timeout 5m; server_tokens off; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; location / { root html; index index.html index.htm; }
默认在nginx安装完毕后,配置文件中是存在https协议配置的内,只不过在不使用的时候,直接是被注释掉的内容。这里我们简单的针对于内容进行讲解。配置https内容时,需要用到第三方可信任的 SSL 证书,需要提前进行准备。
SSL 证书主要有两个功能:加密和身份证明,通常需要购买,也有免费的,通过第三方 SSL 证书机构颁发。详情了解请自行百度。
ssl配置的端口,默认443,不建议修改。
证书文件(pem)和私钥文件(key),注意不同的机构颁发的文件可能不同,证书文件还有.crt结尾的。要注意,这里是ssl key文件存放的相对路径,也可以配置为绝对路径,根据自己的文件名称和路径修改即可。
缓存时间和超时时间。配置用于SSL会话的缓存时间为1分钟。开启SSL会话功能后,该指令定义使用会话的期限。
禁止在header中出现服务器版本,防止黑客利用版本漏洞攻击。强烈建议配置此项!!!
openssl支持的加密套件,这里采用算法套件MD5算法。
指定是否服务器密码优先于客户端密码。
这里https配置内容我们简单讲解下,后续有时间进行一章单独的详细讲解。
花了4章的时间,磨磨唧唧的终于讲完了。详细的内容就详细看每个章节的内容吧,要是想直接用大脑记录nginx.conf的配置模块,我觉得直接看图即可了。这图,多美,这图,多帅,这图,一下省略1W字赞美咱的图。
写在最后,文章中相当于介绍了所有的模块内容,在实际工作配置中,不建议所有的内容全部都配置在nginx.conf文件中,因为实际项目上,内容多,模块多,若都配置在一个文件中,找不好找,改不还改,所以,给予建议应优先采用引入配置文件的方式,也就是类似于1.4中的内容。一个大的模块进行创建一个文件夹,进行存放不同的配置文件,这样方便我们后期的运维。好,nignx.conf的讲解内容就到这!!!!!
转载地址:http://wbie.baihongyu.com/