nginx快速入门

140 阅读3分钟

nginx常用配置

### 常用nginx配置
 
events {
    #定义每个进程的最大连接数,受系统进程的最大打开文件数量限制。
    worker_connections  1024;
}
 
#######Nginx的Http服务器配置,Gzip配置
http {
    #主模块指令,实现对配置文件所包含的文件的设定,可以减少主配置文件的复杂度,DNS主配置文件中的zonerfc1912,acl基本上都是用include语句。
    include       mime.types;
 
    #核心模块指令,智力默认设置为二进制流,也就是当文件类型未定义时使用这种方式
    default_type  application/octet-stream;
 
    #下面代码为日志格式的设定,main为日志格式的名称,可自行设置,后面引用
    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';
 
    #引用日志main
    #access_log  logs/access.log  main;
 
    #设置允许客户端请求的最大的单个文件字节数 文件上传经常用到
    #client_max_body_size 20M;
 
    #设置客户端连接保存活动的超时时间
    #keepalive_timeout  0;
    keepalive_timeout  65;
 
    #设置客户端请求读取超时时间
    #client_header_timeout 10;
    #设置客户端请求主体读取超时时间
    #client_body_timeout 10;
    #用于设置相应客户端的超时时间
    #send_timeout
 
    ####HttpGZip模块配置
    #httpGzip modules
    #开启gzip压缩
    #gzip  on;
    #设置允许压缩的页面最小字节数
    #gzip_min_length 1k;
    #申请4个单位为16K的内存作为压缩结果流缓存
    #gzip_buffers 4 16k;
    #设置识别http协议的版本,默认为1.1
    #gzip_http_version 1.1;
    #指定gzip压缩比,1-9数字越小,压缩比越小,速度越快
    #gzip_comp_level 2;
    #指定压缩的类型
    #gzip_types text/plain application/x-javascript text/css application/xml;
    #让前端的缓存服务器进过gzip压缩的页面
    #gzip_vary on;
 
    #########Nginx的server虚拟主机配置
    server {
        #监听端口为 80
        listen       80;
 
        #设置主机域名
        server_name  localhost;
 
        #设置访问的语言编码
        #charset koi8-r;
 
        #设置虚拟主机访问日志的存放路径及日志的格式为main
        #access_log  logs/host.access.log  main;
 
        #设置虚拟主机的基本信息
        location / {
            #设置虚拟主机的网站根目录
            #root根路径配置,用于访问文件系统,在匹配到location配置的URL路径后,指向【root】配置的路径,并把location配置路径附加到其后
            #alias别名配置,用于访问文件系统,在匹配到location配置的URL路径后,指向【alias】配置的路径,不会对请求路径做任何修改
            #这里配置的是根目录所以用的是root
            root   /usr/share/nginx/html;
            #alias   /usr/share/nginx/html;
 
            #设置虚拟主机默认访问的网页,比如访问xxx.com默认访问的是xxx.com/index.html
            index  index.html index.htm;
        }
 
        #404错误页面,想要页面提示体验好些可以在这里做手脚
        #error_page  404              /404.html;
 
        # redirect server error pages to the static page /50x.html
        # 服务器错误重定向页面,想要页面提示体验好些可以在这里做手脚
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
 
        #匹配路径可以是正则
        location ^~ /xqy-portal-web/ {
            #反向代理配置,匹配转发的到的服务
            proxy_pass       http://yqdz.manage-test.sit.91lyd.com/xqy-portal-web/;
 
            #经常说跨域请求配置
            #add_header Access-Control-Allow-Origin '*';
            #add_header Access-Control-Allow-Methods 'GET,POST,OPTIONS';
 
            #proxy_set_header允许重新定义或者添加发往后端服务器的请求头
            #value可以包含文本、变量或者它们的组合。 当且仅当当前配置级别中没有定义proxy_set_header指令时,会从上面的级别继承配置。 默认情况下,只有两个请求头会被重新定义:
            #$host、$http_host和$proxy_host 是nginx内部导出的变量
            #$host  不显示端口   浏览器请求的ip,不显示端口
            #$http_host 端口存在则显示 浏览器请求的ip和端口号
            #$proxy_host    默认80端口不显示,其它显示  被代理服务的ip和端口号
            #$proxy_add_x_forwarded_for、$remote_addr是一对,nginx均衡负载或有cdn服务的时候有用,详细解释自行百度
            proxy_set_header Host $proxy_host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Real-IP $remote_addr;
        }
 
    }
 
}

常见问题

本地启动了nginx没有权限访问?

错误信息:nginx: [warn] the "user" directive makes sense only if the master process runs with super-user privileges, ignored in /usr/local/nginx/conf/nginx.conf:2

解决方案:在nginx.conf配置文件最上面有一个user配置,默认是nobody,这里网上也有各种方法修改权限,也都试了还是不行,最后把user 后面的用户名字改成当前电脑登录的用户并且加上staff。栗子:user myame staff。

怎么配置多个服务?

配置多个server就好了,不过要注意不同server之建端口号不能重复。不同服务可以有不同的配置,比如文件上传服务client_max_body_size、超时时间要把正常接口请求要大很多。

另外前端开发可以灵活配置多个server来访问不同环境的服务。

想用本地前端项目代码怎么配置?

#静态资源
location ^~ /xxx/ {
    #注意这里用的alias不是root或者proxy_pass
    alias   /Users/codebase/xxx/xxx/dist/; #文件目录
    proxy_set_header Host $proxy_host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Real-IP $remote_addr;
}
#服务请求
location ^~ /xxx/xxx/ {
    proxy_pass       http://127.0.0.1:8080/xxx; #ip+端口+路径 也可以是本地服务的地址
    proxy_set_header Host $proxy_host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Real-IP $remote_addr;
}
#服务请求
location ^~ /xxx/ {
    proxy_pass       http://127.0.0.1:8080/; #ip+端口+路径 也可以是本地服务的地址
    proxy_set_header Host $proxy_host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Real-IP $remote_addr;
}

想用服务器的前端代码怎么配置?

服务端想访问服务器上的前端代码,服务用本地的断点调试怎么配置?

# 静态资源
location ^~ /xxx/ {
    #注意这里用的proxy_pass不是alias或root
    proxy_pass   htt://服务ip或者域名/xxx/; #文件目录 也可以是本地服务的地址
    proxy_set_header Host $proxy_host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Real-IP $remote_addr;
}
#服务请求
location ^~ /xxx/xxx/ {
    proxy_pass       http://127.0.0.1:8080/xxx; #ip+端口+路径 也可以是本地服务的地址
    proxy_set_header Host $proxy_host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Real-IP $remote_addr;
}
#服务请求
location ^~ /xxx/ {
    proxy_pass       http://127.0.0.1:8080/; #ip+端口+路径 也可以是本地服务的地址
    proxy_set_header Host $proxy_host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Real-IP $remote_addr;
}

怎么更优雅的整理nginx配置文件?include、upstream大法?

upstream可以定义变量

#upstream可以定义变量
upstream my_ip{
    server 127.0.0.1;
}
#其他地方就可以直接使用my_ip变量了
#另外nginx中可以直接使用host文件中定义的域名,例如上面的定义可以写成下面的形式
upstream my_ip{
    server localhost;
}
 
#使用举例
location ^~ /xqy-portal-web/manage/ {
    proxy_pass       http://my_ip/manage; #ip + 端口 + 路径
    proxy_set_header Host $proxy_host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Real-IP $remote_addr;
}

#include导入代码片段,可以是server、location、或者一段字符串

#include导入代码片段,可以是server、location、或者一段字符串
 
#文件a.conf
location ^~ /xqy-portal-web/manage/ {
    proxy_pass       http://my_ip/manage; #ip + 端口 + 路径
    proxy_set_header Host $proxy_host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Real-IP $remote_addr;
}
 
 
#同级目录下下文件nginx.conf使用
http {
    server {
        listen       8080;
        #server_name *.com #可以实现多个server监听同一个端口,比如都是80端口配置不同域名路由到不同的首地址,我们暂时用不到可忽略
        client_max_body_size 100M; #上传文件的时候可能会用到
        access_log  /Users/zhangnanning/codebase/host.access.log main; #日志配置
 
        #使用include导入
        include a.conf
 
        #error_page  404              /404.html;
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

nginx常用命令

sudo nginx 启动nginx

sudo nginx -s relaod  保存并重启nginx

nginx -t 检查nginx是否有错