# 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; } } ```