萝卜小站

要做所有萝卜中最胡的一条

0%

Nginx各种代理配置

准备工作

首先需要准备一个解析好的一级域名并做好解析,以及对应的SSL证书。

域名购买参考 NameSilo ,域名解析参考 DNSpod ,SSL证书参考 腾讯云SSL

Nginx主配置文件

打开 /etc/nginx/nginx.conf ,主配置文件只负责80端口及其转发443功能。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;

events {
worker_connections 1024;
}

http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';

access_log /var/log/nginx/access.log main;

sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;

include /etc/nginx/mime.types;
default_type application/octet-stream;

# Load modular configuration files from the /etc/nginx/conf.d directory.
# See http://nginx.org/en/docs/ngx_core_module.html#include
# for more information.
include /etc/nginx/conf.d/*.conf;

server {
listen 80;
#带www和不带www的入口
server_name baidu.com www.baidu.com;
return 301 https://www.baidu.com$request_uri;

location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
}
server {
listen 80;
server_name m.baidu.com;
return 301 https://m.baidu.com$request_uri;

location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
}
}


其中,server第一块为主域名80端口,可配置不同url对应不同的跳转地址。

以后每个子域名都要在主配置文件里面添加80端口的对应跳转。

一级域名配置

首先是一级域名的Https配置,打开 /etc/nginx/conf.d 文件夹。

此文件夹下所有配置都会自动引入主配置文件的。在这里新建一个 baidu.conf 文件,配置如下。

注意对应的证书文件要改好名并且要放在对应的位置上。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
server {
listen 443 ssl;
server_name baidu.com;
return 301 http://www.baidu.com$request_uri;

ssl_certificate /usr/local/cert/crt.crt;
ssl_certificate_key /usr/local/cert/key.key;

ssl_session_cache shared:SSL:1m;
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 / {
root html;
index index.html index.htm;
}
}
server {
listen 443 ssl;
server_name www.baidu.com;

ssl_certificate /usr/local/cert/crt.crt;
ssl_certificate_key /usr/local/cert/key.key;

ssl_session_cache shared:SSL:1m;
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 / {
root /usr/share/nginx/html;
index index.html index.htm;
}
}

这里配置两块server是为了把 https://baidu.com 跳转到 https://www.baidu.com 上。

二级域名配置

还是在 /etc/nginx/conf.d 文件夹下,新建 m.baidu.conf 文件,配置如下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
server {
listen 443 ssl;
server_name m.baidu.com;

ssl_certificate /usr/local/cert/mcrt.crt;
ssl_certificate_key /usr/local/cert/mkey.key;

ssl_session_cache shared:SSL:1m;
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 / {
root /usr/share/nginx/m;
try_files $uri $uri/ /index.html;
}
location /api {
rewrite ^/api/(.*)$ /$1 break;
proxy_pass http://127.0.0.1:9305;
}
}

其中的 try_files 字段是为了适配HTML5的History路由模式。

api 开头的为接口请求,转到9305端口上的后端服务(Java或者Nodejs)

其他二级域名也是单独创建文件,比如 https://tieba.baidu.com 需要创建 tieba.baidu.conf 文件,并且要把证书重命名为 tiebacrt.crttiebakey.key ,存放位置需统一。然后去主配置文件里面添加80端口的监听跳转443即可。

至此所有Nginx配置项全部配置完成了。