一.配置文件结构。
// 主模块/全局配置
main {
user nginx_user // 运行nginx的用户
worker_processes 2 // 根据实际情况进行调整,通常数量是CPU内核数量的整数倍
error_log /usr/local/bin/nginx/logs/error.log // 定义错误日志文件的位置及输出级别【debug / info / notice / warn / error / crit】
worker_rlimit_nofile 65535
}
// 事件模块/工作模式配置
events {
worker_connections 1000
multi_accept 100
use epoll
}
// HTTP模块
http {
// 虚拟主机配置
server {
listen [ip]:[port] // 本机IP加端口
server_name [domain_name] // 域名
// 路由、虚拟目录配置, 这里的path可以写正则
location path { // 实现静态资源服务器
root localpath;
index index.html;
}
// 多个路由、虚拟目录配置 -- 实现反向代理
location path {
pass_proxy http://xxx.com;
proxy_set_header X-real-ip $remote_addr;
proxy_set_header Host $http_host;
}
// 多个路由、虚拟目录配置 -- 实现反向代理到upstream
location path {
pass_proxy backend;
proxy_set_header X-real-ip $remote_addr;
proxy_set_header Host $http_host;
}
}
// 可配置多个虚拟主机
server {
}
// 配置负载均衡
upstream backend{
ip_hash;
server 192.168.1.100:8000 weight=9;
server 192.168.1.100:8001 down;
server 192.168.1.100:8002 max_fails=3;
server 192.168.1.100:8003 fail_timeout=20s;
server 192.168.1.100:8004 max_fails=3 fail_timeout=20s;
}
}
由上可见,可以Nginx的配置文件结构由三大模块组成, 分别是main、events、http。其中http模块下又由server、upstream组成, 分别实现虚拟主机和负载均衡的配置。server下又有多个location配置是路由、虚拟目录的配置, 可以实现静态资源服务器, 反向代理。
完整的Nginx配置参数建议参考官方文档: http://www.nginx.cn
二、配置虚拟主机
server {
listen [ip]:[port] // 本机IP加端口
server_name [domain_name] // 域名
location path {
}
}
listen: 设定监听的IP以及端口
server_name: 监听的域名
location:配置匹配路径转发的静态资源或upstream,匹配路径支持普通字符串,通配符、正则表达式
根据上面的伪代码,通过使用不用的IP、端口、域名即可配置出多个不同的虚拟主机。
三、配置静态资源服务器
配置好虚拟主机后, 可以通过配置location配置路由, 路由到静态资源的位置, 这样就实现静态资源服务器的搭建了, 伪代码如下:
location / {
root /opt/program/web;
index index.htm index.html;
}
root: 静态资源的路径
index: 当被访问的资源不存在时跳转的文件名
四、配置反向代理
配置好虚拟主机后, 可以通过配置location配置路由, 然后针对路由反向代理到后端服务, 这样就实现反向代理了。 伪代码如下:
location / {
pass_proxy http://www.baidu.com;
proxy_set_header Host $host:$proxy_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
pass_proxy: 反向代理的后端服务地址
proxy_set_header: 设置请求头,如把真实的IP地址加到 X-real-ip 请求头上,主要是为了反向代理之后,不丢失真实的主机、端口
五、配置负载均衡
配置负载均衡要先配置好upstream, 再虚拟主机, 然后通过location配置路由,针对路由反向代理到upstream的名称即可实现负载均衡, 伪代码如下:
// 虚拟主机配置
server {
listen [ip]:[port] // 本机IP加端口
server_name [domain_name] // 域名
location / {
pass_proxy backend; /// 实现反向代理到upstream,以实现负载均衡
proxy_set_header Host $host:$proxy_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
// 配置负载均衡
upstream backend{
ip_hash;
server 192.168.1.100:8000 weight=9;
server 192.168.1.100:8001 down;
server 192.168.1.100:8002 max_fails=3;
server 192.168.1.100:8003 fail_timeout=20s;
server 192.168.1.100:8004 max_fails=3 fail_timeout=20s;
}
主要讲解一下upstream的配置:
- ip_hash:指定请求调度算法,默认是weight权重轮询调度,可以指定
- server host:port:分发服务器的列表配置
- down:表示该主机暂停服务
- max_fails:表示失败最大次数,超过失败最大次数暂停服务
- fail_timeout:表示如果请求受理失败,暂停指定的时间之后重新发起请求
六、配置SSL
server{
#监听443端口
listen 443;
#对应的域名,把domainname改成你们自己的域名就可以了
server_name domainname;
ssl on;
#配置证书密钥文件路径
ssl_certificate /etc/ssl/346534.perm;
#配置证书密钥文件路径
ssl_certificate_key /etc/ssl/37457.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
#配置路由
location / {
}
}
// 加上一个虚拟主机, 让访问非https的情况下强制重写到https
server{
listen 80;
server_name domainname;
rewrite ^/(.*)$ https://domainname:443/$1 permanent;
}