Nginx安装

Linux

包安装

bash
1
2
3
4
5
# CentOS
sudo yum install nginx

# Ubuntu
sudo apt install nginx

源码安装

1、安装gcc

安装 nginx 需要先将官网下载的源码进行编译,编译依赖 gcc 环境,如果没有 gcc 环境,则需要安装。

bash
1
2
3
4
5
6
7
8
# CentOS
yum install gcc-c++
yum install make automake gcc gcc-c++ kernel-devel

# Ubuntu
apt install gcc
apt install build-essential
# build-essential是Debian系的meta package的名字,CentOS不一样。

2、PCRE pcre-devel 安装

PCRE(Perl Compatible Regular Expressions) 是一个Perl库,包括 perl 兼容的正则表达式库。nginx 的 http 模块使用 pcre 来解析正则表达式,所以需要在 linux 上安装 pcre 库,pcre-devel 是使用 pcre 开发的一个二次开发库。nginx也需要此库。

bash
1
2
3
4
5
# CentOS
yum install -y pcre pcre-devel

# Ubuntu
apt install libpcre3 libpcre3-dev

3、zlib 安装

zlib 库提供了很多种压缩和解压缩的方式, nginx 使用 zlib 对 http 包的内容进行 gzip ,所以需要在 Centos 上安装 zlib 库。

bash
1
2
3
4
5
# CentOS
yum install -y zlib zlib-devel

# Ubuntu
apt install zlib1g zlib1g-dev

4、OpenSSL 安装

OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及 SSL 协议,并提供丰富的应用程序供测试或其它目的使用。nginx 不仅支持 http 协议,还支持 https(即在ssl协议上传输http),所以需要在 Centos 安装 OpenSSL 库。

bash
1
2
3
4
5
# CentOS
yum install -y openssl openssl-devel

# Ubuntu
sudo apt install openssl libssl-dev

5、Nginx 安装

下载地址:https://nginx.org/en/download.html

bash
1
2
3
4
5
6
wget https://nginx.org/download/nginx-1.20.1.tar.gz
tar -zxvf nginx-1.20.1.tar.gz
cd nginx-1.20.1
./configure
make
make install

6、开机自启动

bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
cd /lib/systemd/system/
vim nginx.service
====================================================
[Unit]
Description=nginx service
After=network.target

[Service]
Type=forking
ExecStartPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true

[Install]
WantedBy=multi-user.target
====================================================
systemctl enable nginx

systemctl start nginx

Windows

1、下载解压缩到安装目录

不用添加系统环境变量,直接到安装目录运行命令。

2、到安装目录下启动

bash
1
2
start nginx 		#启动服务
nginx -s stop #关闭服务

常用命令

bash
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
cd /usr/local/nginx/sbin/
./nginx # 启动
./nginx -s stop # 停止
./nginx -s quit # 安全退出
./nginx -s reopen # 重启
./nginx -s reload # 重新加载配置文件
ps aux|grep nginx # 查看nginx进程

# 防火墙和开放端口
# 开启
service firewalld start
# 重启
service firewalld restart
# 关闭
service firewalld stop
# 查看防火墙规则
firewall-cmd --list-all
# 查询端口是否开放
firewall-cmd --query-port=8080/tcp
# 开放80端口
firewall-cmd --permanent --add-port=80/tcp
# 移除端口
firewall-cmd --permanent --remove-port=8080/tcp

#重启防火墙(修改配置后要重启防火墙)
firewall-cmd --reload

# 参数解释
#1、firwall-cmd:是Linux提供的操作firewall的一个工具
#2、--permanent:表示设置为持久
#3、--add-port:标识添加的端口

Nginx作用

  • 正向代理
  • 反向代理
  • 负载均衡
  • 动静分离

Nginx配置

bash
1
2
# apt安装位置 /etc/nginx/
# 源码安装位置 /usr/local/nginx/
bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# nginx反向代理简易
upstream domain_test {
server 192.168.6.198:80 weight=5;
}

server {
listen 80;
server_name 172.16.33.106;
access_log main;
location / {
proxy_pass http://172.16.33.106:8686;
root html;
index index.html index.htm;
}

}
bash
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
server {
listen 80 default_server;
listen [::]:80 default_server;

index index.html index.htm;

root /home/zyadmin/html;

server_name _;

location / {
# 必须把/指向cvat
proxy_pass http://localhost:8080;
}

location /anno/ {
# 同时把/anno指向cvat
proxy_pass http://localhost:8080/;
}

location /code/ {
proxy_pass http://127.0.0.1:8081/;
proxy_set_header Host $host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection upgrade;
proxy_set_header Accept-Encoding gzip;
}
}
bash
1
2
3
# 重启nginx
sudo service nginx start
sudo service nginx reload
bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
server {
listen 80;
listen [::]:80;
server_name 172.16.33.106;
index index.php index.html index.htm;
location /anno {
proxy_pass http://172.16.33.106:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /code {
proxy_pass http://172.16.33.106:8484;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# nginx反向代理模板一般转发
upstream domain_test {
server 192.168.6.198:80 weight=5;
}

server {
listen 80;
server_name client-test.sinoif.com;
access_log "pipe:rollback /var/www/logs/nginx/client-test-access.log interval=1d baknum=7 maxsize=1G" main;
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_set_header X-NginX-Proxy true;
proxy_pass http://domain_test;
}

}
bash
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
# 带前缀转发,upstream负载均衡
upstream test_dev {
server localhost:8081 weight=5;
}
upstream test_ded {
server localhost:8082 weight=5;
}

server {
listen 80;
server_name test.com;
access_log "pipe:rollback /var/www/logs/nginx/test.com-access.log interval=1d baknum=7 maxsize=1G" main;

location ^~/ded/ {
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_set_header X-NginX-Proxy true;
proxy_pass http://test_ded/; #注意后面一定要以/结尾 否则请求一些接口会报错404 或 405
}

location ^~/dev/ {
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_set_header X-NginX-Proxy true;
proxy_pass http://test_dev/; #注意后面一定要以/结尾 否则请求一些接口会报错404 或 405
}
}

#^~/prod/表示匹配前缀是prod的请求,proxy_pass的结尾有/, 则会把/test_dev/*后面的路径直接拼接到后面,即移除替换test_dev 为域名 localhost:8081
bash
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
# nginx反向代理模板
upstream apachephp {
server ip:8080; #Apache
}

## Start www.nowamagic.net ##
server {
listen 80;
server_name www.nowamagic.net;

access_log logs/quancha.access.log main;
error_log logs/quancha.error.log;
root html;
index index.html index.htm index.php;

## send request back to apache ##
location / {
proxy_pass http://apachephp;

#Proxy Settings
proxy_redirect off;
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_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
proxy_max_temp_file_size 0;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
}
}