# Nginx安装
## Linux
**包安装**
```bash
# CentOS
sudo yum install nginx
# Ubuntu
sudo apt install nginx
```
**源码安装**
1、安装gcc
安装 nginx 需要先将官网下载的源码进行编译,编译依赖 gcc 环境,如果没有 gcc 环境,则需要安装。
```bash
# CentOS
yum install make automake gcc gcc-c++ kernel-devel libtool
# 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
# CentOS
yum install -y pcre pcre-devel
# Ubuntu
apt install libpcre3 libpcre3-dev
```
3、zlib 安装
zlib 库提供了很多种压缩和解压缩的方式, nginx 使用 zlib 对 http 包的内容进行 gzip ,所以需要在 Centos 上安装 zlib 库。
```bash
# 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
# CentOS
yum install -y openssl openssl-devel
# Ubuntu
sudo apt install openssl libssl-dev
```
5、Nginx 安装
下载地址:https://nginx.org/en/download.html
```bash
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
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
start nginx #启动服务
nginx -s stop #关闭服务
```
# 常用命令
```bash
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
# apt安装位置 /etc/nginx/
# 源码安装位置 /usr/local/nginx/
```
```bash
# 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
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
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
# 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
# 带前缀转发,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
# 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;
}
}
```