配置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