## nginx的安装
这里使用docker安装nginx,原版nginx的安装方式请见[这篇文章][text-1]。
### 安装docker
请见[docker全家桶][text-2]。
### 安装nginx
- 目录结构
```bash
.
├── conf
│ ├── conf.d
│ └── nginx.conf
├── docker-compose.yml
├── log
└── www
```
- 新建`docker-compose.yml`文件
```yaml
version: '2.0'
services:
nginx:
container_name: nginx
image: nginx:1.17.4
restart: always
ports:
- 80:80
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
- ./conf.d:/etc/nginx/conf.d
- ./log:/var/log/nginx
- ./www:/www
```
> 简单介绍一下`volumes`属性下各个文件/目录的意义。
>
> - `./nginx.conf`:表示对应nginx下的根配置
> - `./conf.d`:表示nginx下的拓展配置的放置目录
> - `./www`:表示静态文件的放置目录,多用于静态代理时
- `nginx.conf`配置内容
```bash
user nginx;
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
# 最大文件上传的大小
client_max_body_size 200M;
# 请求头名称中是否包含允许包含下划线
underscores_in_headers on;
sendfile on;
keepalive_timeout 65;
include /etc/nginx/conf.d/*.conf;
}
```
- nginx启动
在`docker-compose.yml`对应的文件夹下执行以下命令
```bash
docker-compose up -d
```
## nginx配置
这里的配置主要说明两种,且配置均针对使用docker搭建的nginx,且配置均为cond.d下的配置。
### 反向代理
- app.conf
```bash
server {
listen 80;
server_name yourhost.com;
location / {
proxy_pass http://192.168.1.1:8080/;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
```
> `proxy_set_header`:表示允许请求头向被代理的服务传递,当后台或其他服务需要某个自定义请求头时,可以使用此属性。此属性可配合上文`nginx.conf`中的`underscores_in_headers on;`一并使用。
- 示例
- 顶级路径
```bash
server {
listen 80;
server_name www.example.com;
location / {
proxy_pass http://localhost:3000;
}
}
```
- 子路径
```bash
server {
listen 80;
server_name www.example.com;
location /example/ { # Note: 尾部斜杠
proxy_pass http://localhost:3000/; # Note: 尾部斜杠
}
}
```
### 静态代理
- app-web.conf
```bash
server {
listen 80;
server_name web.yourhost.com;
location / {
root /www/index.html;
}
location /app {
proxy_pass http://yourhost.com;
}
}
```
> 此静态代理数据vue打包后的配置文件,静态动态代理全都置于该配置中。
>
> 这里的`location /`下面配置的是静态页面的存放位置。
>
> `location /app`下配置的是页面中请求路径的转发。
- 二级目录代理
在二级代理的情况下,根目录下还得建立一个与根目录相同的文件夹
如图所示
![][image-5]
### Nginx proxy_pass 关于 '/' 的作用
有这样一个服务器访问如下:
访问` http://192.168.118.15 `得到
![image-1][]
访问 `http://192.168.118.15/a/`,得到
![][image-2]
在这台主机前端需要添加一个反向代理。配置如下:
- 第一种配置:
```bash
location /a/ {
proxy_pass http://192.168.118.15/;
}
```
当这样配置的时候,访问` http://192.168.118.14/a/ `结果如下:
![][image-3]
总结:
```bash
proxy_pass http://192.168.118.14/a/ ==> http://192.168.118.15/
```
- 第二种配置
```bash
location /a/ {
proxy_pass http://192.168.118.15;
}
```
当这样配置的时候,访问` http://192.168.118.14/a/ `结果如下:
![][image-4]
总结:
```bash
proxy_pass http://192.168.118.14/a ==> http://192.168.118.15/
```
综上所述:
- 当 `proxy_pass` 不加 '/' 时, location uri 会追加到 `proxy_pass http://domain/` 后面;
- 当 `proxy_pass` 加 '/' 时,不会在 `proxy_pass http://domain` 后面追加任何uri
切记以上两条规则。
### 后记
文章中介绍的配置方法为博主公司使用的配置,适用面难免不全,只给出最基本的配置做备份使用。参考请适度。
[text-1]: https://blog.chihiro.org.cn/archives/2019090802472017826
[text-2]: https://blog.chihiro.org.cn/archives/2019103119411152246
[image-1]: https://blog.chihiro.org.cn/upload/2020/3/image-536a22d4584f458b8bf543cb3782befb.png
[image-2]: https://blog.chihiro.org.cn/upload/2020/3/image-edbf517dbf5b436a99bb0189ab475bdc.png
[image-3]: https://blog.chihiro.org.cn/upload/2020/3/image-45e5ebe0458e4a0eb34eb2964ccd9cd2.png
[image-4]: https://blog.chihiro.org.cn/upload/2020/3/image-0e266079c6fd443d8ac78d83e092b049.png
[image-5]: https://blog.chihiro.org.cn/upload/2020/05/image-6fcfc75fbc9343cea0928547d074b9e1.png

docker安装nginx及配置