Nginx配置以及各种坑

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 则对 ”/” 可有可无。

  • 9
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值