Nginx常用配置,开箱即用

最近在网上开了个店铺,提供付费技术支持。经常接到Nginx安装和配置的单。这里笔者将常用配置统统写在下面,方便咱们日常使用。

这里本着开箱即用的原则,所以大多数时候不会解释为什么要这样去配置,也不涉及Nginx的安装步骤。下面的所有配置,都可以直接复制后粘贴使用,只要改改ip地址或者端口就可以了。

案例一

nginx作为静态文件服务器、图片服务器使用

1
2
3
4
5
6
7
8
server {
listen 80;
server_name abc.com;
location / {
root /home/appadmin/www/images;
index index.html;
}
}

案例二

反向代理后端的8080端口到nginx 80 端口

1
2
3
4
5
6
7
8
 server {
listen 80;
server_name abc.com;
location / {
proxy_pass http://localhost:8080/;
index index.html;
}
}

案例三

反向代理后获取不到客户访问的ip或一些header信息,就用下面的配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
server {
listen 80;
server_name abc.com;
location / {
proxy_set_header X-Real-IP ;
proxy_set_header X-Real-PORT ;
proxy_set_header host ;
proxy_set_header X-Forwarded-Host ;
proxy_set_header X-Forwarded-Server ;
proxy_set_header X-Forwarded-For ;
proxy_pass http://localhost:8080/;
index index.html;
}
}

案例四

反向代理,并配置https

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
server {
listen 443 ssl;
server_name abc.com;
ssl_certificate /ssl/abc.pem; # 这里可以是pem或者crt文件
ssl_certificate_key /ssl/abc.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
location / {
proxy_set_header X-Real-IP ;
proxy_set_header X-Real-PORT ;
proxy_set_header host ;
proxy_set_header X-Forwarded-Host ;
proxy_set_header X-Forwarded-Server ;
proxy_set_header X-Forwarded-For ;
proxy_pass http://localhost:8080/;
}
}

案例五

将http强制跳转到https,也就是用户访问80端口的时候,自动跳转到443

1
2
3
4
5
server {
listen 80;
server_name abc.com;
return 301 https://;
}

案例六

是案例五的另外一种实现方法

1
2
3
4
5
6
7
server {
listen 80;
server_name abc.com;
location / {
rewrite ^(.*)$ https://abc.com permanent;
}
}

案例七

www跳转到不带www的域名上

1
2
3
4
5
6
7
server {
listen 80;
server_name abc.com www.abc.com;
if ( = 'www.abc.com' ) {
rewrite ^/(.*)$ http://abc.com/ permanent;
}
}

案例八

负载均衡。策略有好几种,这里只配置ip_hash

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
http {
upstream my-server {
ip_hash;
server localhost:8080 weight=1;
server localhost:8081 weight=2;
}

server {
listen 80;
server_name localhost;

location / {
proxy_pass http://my-server;
proxy_redirect default;
}
}
}

案例九

TCP反向代理。Nginx默认是不支持TCP代理的,要支持TCP代理,在安装Nginx的时候要开启 stream模块。就是在编译的时候添加–with-stream参数。

以代理本机的SSH为例。

1
2
3
4
5
6
7
8
9
10
11
stream {
upstream backend {
server 127.0.0.1:22;
}
server {
listen 2222;
proxy_connect_timeout 1s;
proxy_timeout 1h;
proxy_pass backend;
}
}

需要留一个一个参数proxy_timeout,这个是代理超时的意思,建议设置大一点,当你设置为几秒的时候,你连接上去很快就会掉线。

案例十

websocket代理

1
2
3
4
5
6
7
location /ws {
proxy_pass http://localhost:8080/websocket;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade; # 必须参数
proxy_set_header Connection "Upgrade"; # 必须参数
proxy_set_header X-Real-IP $remote_addr;
}