服务器经常使用的操作系统就是CentOS7,下面对 CentOS7 下使用 nginx 做个总结,以下内容整理自网络。
1. 安装最新版 nginx
# 安装epel-release源
sudo yum install epel-release
# 设置ningx安装源
sudo vim /etc/yum.repos.d/nginx.repo
# 写入文件内容
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1
# 安装nginx
sudo yum install nginx -y
2. nginx 配置简介
安装完成后,nginx 的配置文件位于 “/etc/nginx” 目录下。
发布文件位于 “/usr/share/nginx/html” 目录下。
主配置文件"/etc/nginx/nginx.conf"中使用包含指令
“include /etc/nginx/conf.d/*.conf;”
包含了附加配置文件,通常,我们会把新的配置信息放到附加配置文件中。
常用命令
#启动nginx
sudo nginx
#停止nginx
sudo nginx -s stop
#测试配置文件是否正确
sudo nginx -t
#重新加载配置文件
sudo nginx -s reload
3. 隐藏版本号
为了服务器安全,通常会隐藏nginx版本号,防止针对于特定版本的攻击。
http{
...
#隐藏版本信息
server_tokens off;
...
}
4. 启用 gzip
启用 gzip 可以大大加上网络资源传输消耗。
http{
...
gzip on;
gzip_min_length 1k;
gzip_vary on;
gzip_buffers 16 8k;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript image/jpeg image/gif image/png;
...
}
5. 发布 web 网站
如果不配置 “location /”,即不配置默认web站点,是不需要修改nginx配置文件的,只要把要发布的站点目录放到"/usr/share/nginx/html"目录下(此路径为nginx站点发布默认根路径),便可以直接通过 “http://主机名:端口号/web站点目录” 访问发布的站点。
如果配置了默认站点,在发布其他站点时,需要指定站点根路径,但是nginx 配置文件中,类似" root /usr/share/nginx/html/web1" 只能出现一次,其他的根路径指定需要使用"alias" 字段代替 “root” 字段。
#主机默认站点
location / {
root /usr/share/nginx/html/web1;
index index.html index.htm;
}
#站点2
location /web2 {
#使用 alias 指定站点根路径
alias /usr/share/nginx/html/web2;
index index.html index.htm;
}
#站点3
location /web3 {
#使用 alias 指定站点根路径
alias /usr/share/nginx/html/web3;
index index.html index.htm;
}
6. 区分电脑端和移动端访问站点
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
location / {
root /usr/share/nginx/html/web;
#如果是手机移动端访问内容
if ( $http_user_agent ~ "(MIDP)|(WAP)|(UP.Browser)|(Smartphone)|(Obigo)|(Mobile)|(AU.Browser)|(wxd.Mms)|(WxdB.Browser)|(CLDC)|(UP.Link)|(KM.Browser)|(UCWEB)|(SEMC\-Browser)|(Mini)|(Symbian)|(Palm)|(Nokia)|(Panasonic)|(MOT\-)|(SonyEricsson)|(NEC\-)|(Alcatel)|(Ericsson)|(BENQ)|(BenQ)|(Amoisonic)|(Amoi\-)|(Capitel)|(PHILIPS)|(SAMSUNG)|(Lenovo)|(Mitsu)|(Motorola)|(SHARP)|(WAPPER)|(LG\-)|(LG/)|(EG900)|(CECT)|(Compal)|(kejian)|(Bird)|(BIRD)|(G900/V1.0)|(Arima)|(CTL)|(TDG)|(Daxian)|(DAXIAN)|(DBTEL)|(Eastcom)|(EASTCOM)|(PANTECH)|(Dopod)|(Haier)|(HAIER)|(KONKA)|(KEJIAN)|(LENOVO)|(Soutec)|(SOUTEC)|(SAGEM)|(SEC\-)|(SED\-)|(EMOL\-)|(INNO55)|(ZTE)|(iPhone)|(Android)|(Windows CE)|(Wget)|(Java)|(curl)|(Opera)" )
{
root /usr/share/nginx/html/mobile;
}
index index.html index.htm;
}
}
7.反向代理
#服务反向代理
#以"/"表示绝对路径,将相关请求都转发到该服务
location /myserver/ {
proxy_set_header Host $host;
proxy_set_header X-Real-Ip $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass http://localhost:8065/myserver/;
}
#websocket 反向代理
location /message_transfer/ {
proxy_set_header Host $host;
proxy_set_header X-Real-Ip $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
#websocket 转发需要加上 upgrade 配置
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_pass http://localhost:18080/message_transfer/;
}
8.负载均衡
使用 “upstream” 配置负载均衡服务器,upstream 指定了服务器列表,“weight” 表示权重,权重越大,服务器承担的任务越多。
#docloud core 服务负载均衡
upstream docloud_core_servers {
server docloud001:8091 weight=1;
server docloud002:8091 weight=1;
server docloud003:8091 weight=1;
server docloud004:8091 weight=1;
server docloud005:8091 weight=1;
}
server{
...
#服务转发配置
location /dataeye/ {
proxy_set_header Host $host;
proxy_set_header X-Real-Ip $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass http://docloud_core_servers/dataeye/;
}
...
}
9.启用https
启用 https 需要域名和证书。在 nginx 配置文件中,配置好证书信息,https 默认监听443端口。
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name www.ming.com;
ssl_certificate /etc/nginx/ssl/1_www.ming.com_bundle.crt;
ssl_certificate_key /etc/nginx/ssl/2_www.ming.com.key;
# ssl验证相关配置
#缓存有效期
ssl_session_timeout 5m;
#加密算法
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
#安全链接可选的加密协议
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
#使用服务器端的首选算法
ssl_prefer_server_ciphers on;
...
}
10.启用 https 2.0
http2.0 可以加速请求速度,加快站点加载。现在主流浏览器基本都支持。对于不支持的浏览器也会降级到http1.1版本进行访问。
http2.0 需要在 https 的基础上进行启用。
server {
listen 443 http2 ssl;
listen [::]:443 http2 ssl;
server_name www.ming.com;
ssl_certificate /etc/nginx/ssl/1_www.ming.com_bundle.crt;
ssl_certificate_key /etc/nginx/ssl/2_www.ming.com.key;
# ssl验证相关配置
ssl_session_timeout 5m; #缓存有效期
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; #加密算法
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #安全链接可选的加密协议
ssl_prefer_server_ciphers on; #使用服务器端的首选算法
...
}
启用http2.0后,可以通过火狐浏览器验证