配置nginx

  • 配置规范
  • 前端域名配置
  • 后端域名配置
  • SSL证书配置
  • 前端页面压缩配置
  • 快速安装nginx


配置规范

安装nginx之后,我们不能在nginx.conf里面加配置,必须在nginx提供的conf.d目录下或自定义的nginx配置目录下单独加配置,配置文件名为需要添加的域名,文件后缀为conf,

例如需要加api.30days-tech.com这个域名的配置,就在这个域名目录下加一个api.30days-tech.com.conf文件,方便根据域名找配置文件。

如果是单独加配置目录,记得在nginx.conf文件里面加入引入配置,例如include /etc/nginx/conf.d/*.conf;。

这里可能会遇到nginx访问目录的权限问题,这时候看下nginx的第一行配置user nginx;这个nginx用户是否有访问目录的权限,如果没有,可以改为有权限的用户,例如root,然后reload配置。

前端域名配置

如果需要给前端页面配置域名,我们需要在我们项目的根目录下加一个目录,例如web,然后配置一下nginx映射,配置好后reload配置。

可以在这个目录下加一个文件,例如1.txt,直接用配置的域名加/1.txt来访问这个文件,正常访问则表示配置生效,就可以让前端人员上传代码到这里了。

location / {
        root   /service/app/template/web;
        try_files $uri $uri/ /index.html?q=$uri&$args;
        index  index.html index.htm;
}

以下是一次完整的配置示例:
server {
        listen       80;
        server_name  manager.30days-tech.com;

        location / {
                root   /service/app/template/web;
                try_files $uri $uri/ /index.html?q=$uri&$args;
                index  index.html index.htm;
        }

}

后端域名配置

# 配置负载的多台服务器
upstream myserver { 
        # weight表示权重,不填默认多台服务器之间轮询,可以根据每台服务器的负载单独设置权重,权重小则收到的请求会少一些
    server 10.0.6.108:7080 weight=5; 
    server 10.0.0.85:8980 weight=5; 
}

# 根据后端进程的统一前缀进行请求拦截
location /template { 
        # 将请求转发到本地的某个端口上,如果需要进行内部多台服务器进行负载,可以加一个upstream配置
    # 如果配置了upstream,则配置为proxy_pass http://myserver(如果upstream端口是一样的,这里可以加上端口); 
        proxy_pass http://127.0.0.1:9400; 
    # 这里对请求的最大包体大小限制,通常太小会影响上传文件
      client_max_body_size 100m;
    # Nginx使用该大小申请read_buf,即大小指定了 upstream header 最大长度,如果响应头超过了这个长度,
    # Nginx会报upstream sent too big header错误,然后client收到的是502
      proxy_buffer_size  512k;
    # 设置存储被代理服务器响应的body所占用的buffer个数和每个buffer大小。
    # 具体的意思是说,开辟32个长度为32k大小的read_buf用来存储body,当然不是连接建立初始化时就开辟256个,
    # 而是当当前buf不够存响应body时才会新申请一个,最多申请32个buf。
      proxy_buffers   32 32k;
      proxy_busy_buffers_size 512k;
        # 设置转发请求的host,可以将实际的host转发,也可以单独设置为某个域名
      proxy_set_header  Host        $host;
    # 设置用户的实际IP
      proxy_set_header  X-Real-IP   $remote_addr;
      proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header  Accept-Encoding "";
}

SSL证书配置

有些项目,例如小程序相关项目,是必须要配置SSL证书的,这里就列举怎么配置SSL证书。SSL证书可以从阿里云、腾讯云等提供免费SSL证书的云厂商里面申请并下载下来就可以直接使用了,这种免费的只支持单域名一年的免费使用期。因此每年都需要更新。具体将以下配置放入server模块下,修改下证书文件的路径,然后reload即可生效。

# 配置监听端口443
listen 443;
# 打开ssl支持
ssl on;
server_name api.30days-tech.com;

# nginx的证书,生成命令openssl dhparam -out dhparams.pem 2048;
#ssl_dhparam /etc/nginx/ssl/dhparam.pem;
# 配置证书文件路径
ssl_certificate /service/app/template/ssl/api.30days-tech.com.pem;
# 配置证书密钥文件路径
ssl_certificate_key /service/app/template/ssl/api.30days-tech.key;
# 1m可以同时保存4000个会话,10m理论支持4万个会话,注意这个改动后需要重启 nginx才会生效
ssl_session_cache shared:SSL:10m;
# 会话超时时间,不能设置太长,默认5分钟
ssl_session_timeout 5m;
# 请按照以下协议配置
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
#配置ssl加密算法,多个算法用:分隔,ALL表示全部算法,!表示不启用该算法,+表示将该算法排到最后面去。
# 请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
# 如果不指定默认为off,当为on时,在使用SSLv3和TLS协议时,服务器加密算法将优于客户端加密算法。
ssl_prefer_server_ciphers on;

前端页面压缩配置

对于一些比较大的项目,前端页面文件会比较大,这样在用户首次访问时下载页面文件会比较久,为了加快加载速度,可以使用nginx对页面文件进行压缩传输,也可以将文件放到OSS上并配置CDN加速。以下是nginx配置页面压缩的代码,将这段配置放入http模块下后执行reload操作即可看到效果。

#开启和关闭gzip模式
gzip on;

#gizp压缩起点,文件大于1k才进行压缩
gzip_min_length 1k;

# gzip 压缩级别,1-9,数字越大压缩的越好,也越占用CPU时间(通常设置到5已经够用)
gzip_comp_level 5;

# 进行压缩的文件类型。
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/xml text/javascript application/json image/png image/gif image/jpeg;

#nginx对于静态文件的处理模块,开启后会寻找以.gz结尾的文件,直接返回,不会占用cpu进行压缩,如果找不到则不进行压缩
# gzip_static on|off

# 是否在http header中添加Vary: Accept-Encoding,建议开启
gzip_vary on;

# 设置压缩所需要的缓冲区大小,以4k为单位,如果文件为7k则申请2*4k的缓冲区 
gzip_buffers 4 16k;

# 设置gzip压缩针对的HTTP协议版本
# gzip_http_version 1.1;

快速安装nginx

最简单的nginx安装方法:yum clean all && yum install nginx

yum安装方式配置文件默认在/etc/nginx/nginx.conf