Nginx配置以及各种坑
main段配置信息
user nginx; # 运行用户,默认即是nginx,可以不进行设置
worker_processes auto; # Nginx 进程数,一般设置为和 CPU 核数一样
error_log /var/log/nginx/error.log warn; # Nginx 的错误日志存放目录
pid /var/run/nginx.pid; # Nginx 服务启动时的 pid 存放位置
events段配置信息
events {
use epoll; # 使用epoll的I/O模型(如果你不知道Nginx该使用哪种轮询方法,会自动选择一个最适合你操作系统的)
worker_connections 1024; # 每个进程允许最大并发数
}
http段配置信息
配置使用最频繁的部分,代理、缓存、日志定义等绝大多数功能和第三方模块的配置都在这里设置
http {
# 设置日志模式
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 /var/log/nginx/access.log main; # Nginx访问日志存放位置
sendfile on; # 开启高效传输模式
tcp_nopush on; # 减少网络报文段的数量
tcp_nodelay on;
keepalive_timeout 65; # 保持连接的时间,也叫超时时间,单位秒
types_hash_max_size 2048;
include /etc/nginx/mime.types; # 文件扩展名与类型映射表
default_type application/octet-stream; # 默认文件类型
include /etc/nginx/conf.d/*.conf; # 加载子配置项
# server段配置信息
server {
listen 80; # 配置监听的端口
server_name localhost; # 配置的域名
# location段配置信息
location / {
root /usr/share/nginx/html; # 网站根目录
index index.html index.htm; # 默认首页文件
deny 172.168.22.11; # 禁止访问的ip地址,可以为all
allow 172.168.33.44;# 允许访问的ip地址,可以为all
}
error_page 500 502 503 504 /50x.html; # 默认50x对应的访问页面
error_page 400 404 error.html; # 同上
}
}
配置证书
下载证书的压缩文件,里面有个 Nginx 文件夹,把 xxx.crt 和 xxx.key 文件拷贝到服务器目录,再进行如下配置:
示例:
server {
listen 443 ssl; # SSL 访问端口号为 443
server_name localhost; # 填写绑定证书的域名
ssl_certificate /usr/local/src/cert/_.x.chain.crt; #证书公钥
ssl_certificate_key /usr/local/src/cert/x.key; #证书私钥
ssl_session_timeout 10m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # 支持ssl协议版本,默认为后三个,主流版本是[TLSv1.2]
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
}
配置upStream负载均衡
用于定义上游服务器(指的就是后台提供的应用服务器)的相关信息。
语法:upstream name {
…
}
上下文:http{
示例:
#平台负载均衡规则
upstream api{
consistent_hash $request_uri;
server 10.10.x.x:8081;
server 10.10.x.x:8081;
check interval=3000 rise=2 fall=5 timeout=1000;
}
配置反向代理
反向代理是工作中最常用的服务器功能,经常被用来解决跨域问题。
为了看起来方便,把行号显示出来 :set nu (个人习惯),然后我们去 http 模块的 server 块中的
location /store/ {
proxy_pass http://127.0.0.1:8080;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 18000;
proxy_send_timeout 18000;
proxy_read_timeout 18000;
add_header Access-Control-Allow-Methods *;
add_header Access-Control-Max-Age 3600;
add_header Access-Control-Allow-Credentials true;
add_header Access-Control-Allow-Origin *;
if ($request_method = OPTIONS) {
return 200;
}
location /store/ { … }
定义了一个Nginx的location块,用于匹配所有以/store/开头的请求。
proxy_pass http://127.0.0.1:8080/;
指定了代理服务器的地址,即当请求匹配/store/时,Nginx会将请求转发到本机的8889端口上。
这块有个注意的点:
proxy_pass http://127.0.0.1:8080 后面请求需要再加一个/api
proxy_pass http://127.0.0.1:8080/ 后面请求不需要再加/api
proxy_set_header X-Real-IP $remote_addr;
设置一个名为X-Real-IP的HTTP头,其值为原始请求的客户端IP地址($remote_addr)。
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
设置一个名为X-Forwarded-For的HTTP头,其值为客户端的原始IP地址,这个头通常用于标识请求经过的代理服务器的IP地址。
proxy_connect_timeout 18000;
设置与后端服务器建立连接的超时时间,这里是18000毫秒(18秒)。
proxy_send_timeout 18000;
设置代理服务器发送请求到后端服务器的超时时间,这里是18秒。
proxy_read_timeout 18000;
设置代理服务器从后端服务器读取响应的超时时间,这里是18秒。
add_header Access-Control-Allow-Methods *;
添加一个CORS(跨源资源共享)头,允许所有HTTP方法。
add_header Access-Control-Max-Age 3600;
设置CORS头,允许预检请求的结果被缓存3600秒(1小时)。
add_header Access-Control-Allow-Credentials true;
设置CORS头,允许请求携带凭证(如cookies)。
add_header Access-Control-Allow-Origin *;
设置CORS头,允许来自任何源的请求。
if ($request_method = OPTIONS) { return 200; }
条件语句,当请求方法为OPTIONS时(通常是CORS预检请求),Nginx将直接返回状态码200,表示预检请求成功,无需进一步处理。
Nginx中alias与root的区别
一、区别
Nginx指定文件路径有两种方式root和alias,这两者的用法区别在于对URI的处理方法不同。
1.举例说明
root
location /web {
root /usr/local/src;
index index.html index.htm;
try_files $uri $uri/ /index.html;
}
#若按照这种配置的话,则访问/web/目录下的文件时,nginx会去/usr/local/src/web下找文件。 root 会把location后面的路径拼到最后面
alias
location /web {
alias /usr/local/src/web/;
index index.html index.htm;
try_files $uri $uri/ /index.html;
}
#若按照上述配置的话,则访问/web/目录里面的文件时,ningx会自动去/usr/local/src/web目录找文件。
注意:
1、 alias 只能作用在location中,而root可以存在server、http和location中。
2、 alias 后面必须要用 “/” 结束,否则会找不到文件,而 root 则对 ”/” 可有可无。