nginx 作为web服务器的常用配置

nginx代理静态页面

1
2
$ cd /etc/nginx/conf.d/
$ vim default.conf

修改location

1
2
3
4
location / {
root /opt/app/code; # 修改为你的静态文件的路径
index index.html index.htm;
}

保存退出

1
2
3
4
5
$ nginx -t  #检查配置有无语法错误
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

$ nginx -s reload

在浏览器访问nginx服务器

图1

nginx代理静态页面的缓存

图2


图3

和图1比较,ETag和Last-Modified没有改变,服务器决策后返回304

配置一下nginx加一个过期时间

1
2
$ cd /etc/nginx/conf.d
$ vim default.conf
1
2
3
4
5
location / {
root /opt/app/code;
expires 2h; #加了一行设置过期时间
index index.html index.htm;
}
1
2
$ nginx -t
$ nginx -s reload

再次用浏览器访问

图4

从图中可以看到多了Cache-Control: max-age=7200, 7200s正好是服务器设置的2h

note: 刷新页面发现request header中的Cache-Control:max-age=0
这个属于浏览器的行为,每次刷新页面正常有设置的缓存2h,应该不请求服务器,事实上因为request_header中的max-age=0还是会发一次请求的再让ETag去和服务器比较,决策后返回的还是304

设置跨越

1
$ vim /etc/nginx/conf.d/default.conf
1
2
3
4
5
6
7
location / {
root /opt/app/code;
expires 2h;
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods GET,POST,PUT,DELETE,OPTIONS;
index index.html index.htm;
}
1
2
$ nginx -t
$ nginx -s reload

nginx的反向代理

1
2
$ cd /etc/nginx/conf.d
$ vim demo.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
server {
listen 8000;
server_name 112.74.13.145;
server_name_in_redirect off;
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_buffering off;
proxy_pass http://112.74.13.145:2000;
proxy_redirect off;
}
}
1
2
$ nginx -t
$ nginx -s reload

注释:2000是docker容器里的nginx,8000是云主机的nginx(相当于2台服务器)
通过浏览器访问

5. 配置https

配置文件如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
upstream demo {
server 127.0.0.1:3001;#ip,port可以随便修改为合适的ip,port, 这里多写几个可以做负载均衡
}

server {
listen 443;
server_name 192.168.1.2; #服务器的ip
ssl on;
ssl_certificate /ssl/www/www.crt;#填写具体的文件路径
ssl_certificate_key /ssl/www/www.key;#填写具体的文件路径
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;
server_name_in_redirect off;
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_buffering off;
proxy_pass http://demo;
proxy_redirect off;
}
}