使用yum安装Nginx

一、安装之前

Nginx 要gcc的编译环境,所以,在 Centos 中需要安装编译环境来使Nginx能够编译起来

  1. 1.安装gcc的编译环境
  2. yum -y install gcc gcc-c++
  3. #如果需要的话,安装这些依赖 - pcre来解析正则表达式,使用zlib对http包的内容进行gzip,openssl支持https(即在ssl协议上传输http),需要在linux安装openssl库
  4. yum install -y pcre pcre-devel zlib zlib-devel openssl openssl-devel
  5. #查询所有已经安装的软件包
  6. rpm -qa | grep nginx
  7. #如果有,使用以下命令进行强制卸载
  8. rpm -e --nodeps <nginx安装过的rpm>

二、安装

  1. 2.安装nginx
  2. sudo yum -y install nginx

三、启动

  1. 3.设置nginx启动与开机启动
  2. sudo systemctl start nginx && systemctl enable nginx
  3. #或 sudo service nginx start && chkconfig nginx on
  4. #启动
  5. sudo systemctl start nginx
  6. #或 service nginx start
  7. #重启
  8. sudo systemctl restart nginx
  9. #或 service nginx restart
  10. #开机启动
  11. sudo systemctl enable nginx
  12. #或 sudo service nginx star
  13. #关闭开机启动
  14. sudo systemctl disable nginx
  15. #或 sudo chkconfig nginx off
  16. #重载文件
  17. #sudo nginx -s reload
  18. #检查配置是否成功
  19. #nginx -t

四、设置调整防火墙

FirewallD是Centos 8上的默认防火墙解决方案 在安装过程中,Nginx使用预定义的规则创建防火墙服务文件,以允许访问HTTP(80)和 HTTPS(443) 端口

  1. 4.使用以下命令永久打开必要的端口
  2. #netstat -lnp|grep 6379 #执行开放端口号时候可以看看那些端口在运行
  3. #netstat -anp #哪些端口被打开
  4. #firewall-cmd --state #查看防火墙状态
  5. systemctl start firewalld
  6. sudo firewall-cmd --permanent --zone=public --add-service=http
  7. sudo firewall-cmd --permanent --zone=public --add-service=https
  8. firewall-cmd --zone=public --add-port=7001/tcp --permanent
  9. firewall-cmd --zone=public --add-port=8080/tcp --permanent
  10. sudo firewall-cmd --reload
  11. systemctl restart firewalld

现在,您可以通过http://119.23.72.172/在Web浏览器中打开来测试Nginx的安装。您应该看到默认的
image.png

五、配置nginx.conf文件

Nginx配置文件的结构说明

  • /etc/nginx/ Nginx所有配置文件目录
  • /etc/nginx/nginx.conf Nginx的主要配置文件
  • 为每个域创建一个单独的配置文件使服务器易于维护。
  • Nginx服务器阻止文件必须以结尾.conf并存储在/etc/nginx/conf.d目录中。您可以根据需要拥有任意数量的服务器块。
  • 遵循标准命名约定是一个好习惯。例如:如果域名是mydomain.com则配置文件应命名为mydomain.com.conf
  • 如果在域服务器块中使用可重复的配置段,则最好将这些段重构为片段。
  • Nginx日志文件(access.log和error.log)位于/var/log/nginx/目录中。建议有不同access和error日志文件每个服务器模块。
  • 您可以将域文档的根目录设置为所需的任何位置。webroot的最常见位置包括:
  • /home//
  • /var/www/
  • /var/www/html/
  • /opt/
  • /usr/share/nginx/html
  • /usr/local/<站点名称>
  1. vim /etc/nginx/nginx.conf 编辑完成重载配置文件 sudo nginx -s reload && systemctl restart nginx
  1. #* Official English Documentation: http://nginx.org/en/docs/
  2. #* Official Russian Documentation: http://nginx.org/ru/docs/
  3. #运行用户
  4. user root;
  5. #启动进程,通常设置成和cpu的数量相等或者2倍于cpu的个数(具体结合cpu和内存)。默认为auto
  6. worker_processes auto;
  7. #全局的错误日志和日志级别[ debug | info | notice | warn | error | crit ]
  8. error_log /var/log/nginx/error.log;
  9. #pid进程文件
  10. pid /run/nginx.pid;
  11. # Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
  12. include /usr/share/nginx/modules/*.conf;
  13. #工作模式以及连接数上限
  14. events {
  15. worker_connections 1024;
  16. }
  17. http {
  18. #设定日志格式
  19. log_format main '$remote_addr - $remote_user [$time_local] "$request" '
  20. '$status $body_bytes_sent "$http_referer" '
  21. '"$http_user_agent" "$http_x_forwarded_for"';
  22. #access日志文件的路径,采用上面定义的main 格式记录
  23. access_log /var/log/nginx/access.log main;
  24. #开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件,
  25. #对于普通应用设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,
  26. #以平衡磁盘与网络I/O处理速度,降低系统的负载。注意:如果图片显示不正常把这个改成off。默认开启状态
  27. sendfile on;
  28. #防止网络阻塞
  29. tcp_nopush on;
  30. #tcp协议
  31. tcp_nodelay on;
  32. #长连接超时时间,单位是秒
  33. keepalive_timeout 65;
  34. #类型最大大小
  35. types_hash_max_size 2048;
  36. #设定mime类型,类型由mime.type文件定义。文件扩展名与文件类型映射表
  37. include /etc/nginx/mime.types;
  38. #默认文件类型
  39. default_type application/octet-stream;
  40. #开启gzip压缩输出
  41. #gzip on;
  42. include /etc/nginx/conf.d/*.conf;
  43. #虚拟主机的配置
  44. server {
  45. #监听窗口
  46. listen 80 default_server;
  47. listen [::]:80 default_server;
  48. #定义使用localhost,也可以自动定义域名访问
  49. #域名可以有多个用空格隔开
  50. server_name _;
  51. if ($host = 'gdpi.club'){
  52. return https://www.jianshu.com;
  53. }
  54. root /usr/share/nginx/html;
  55. # 加载默认服务器块的配置文件
  56. include /etc/nginx/default.d/*.conf;
  57. location / {
  58. #定义服务器的默认网站根目录位置
  59. root /home/admin/app/deep_foundation_front/dist;
  60. #定义首页索引文件的名称 定义多个用空格隔开
  61. index index.html index.htm;
  62. try_files $uri $uri/ /index.html;
  63. }
  64. # location ~ .*\.(gif|jpg|jpeg|png)$ {
  65. # expires 24h;
  66. # root /images/;#指定图片存放路径
  67. # access_log /home/nginx/logs/images.log;#图片 日志路径
  68. # proxy_store on;
  69. # proxy_store_access user:rw group:rw all:rw;
  70. # proxy_temp_path /home/images/;#代理临时路径
  71. # proxy_redirect off;
  72. # proxy_set_header Host 127.0.0.1;
  73. # proxy_set_header X-Real-IP $remote_addr;
  74. # proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  75. # client_max_body_size 10m;
  76. # client_body_buffer_size 1280k;
  77. # proxy_connect_timeout 900;
  78. # proxy_send_timeout 900;
  79. # proxy_read_timeout 900;
  80. # proxy_buffer_size 40k;
  81. # proxy_buffers 40 320k;
  82. # proxy_busy_buffers_size 640k;
  83. # proxy_temp_file_write_size 640k;
  84. # if ( !-e $request_filename)
  85. # {
  86. # proxy_pass http://127.0.0.1:8088;#代理访问地址
  87. # }
  88. # }
  89. #location /new {
  90. # 此为新应用index,static目录,同时注意这里是alias,不是root,还有以及new的后面有/结尾
  91. # alias /usr/share/nginx/html/new/;
  92. # try_files $uri $uri/ /new/index.html;
  93. # index index.html index.htm;
  94. # }
  95. #location /api {
  96. # proxy_pass http://47.93.240.205:8800;
  97. # }
  98. # 将PHP脚本代理到在127.0.0.1:80上监听的Apache
  99. #location ~ \.php$ {
  100. # proxy_pass http://127.0.0.1;
  101. #}
  102. # 将PHP脚本传递给在127.0.0.1:9000上监听的FastCGI服务器
  103. #location ~ \.php$ {
  104. # root html;
  105. # fastcgi_pass 127.0.0.1:9000;
  106. # fastcgi_index index.php;
  107. # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
  108. # include fastcgi_params;
  109. #}
  110. # 如果Apache的文档根与nginx的一致,禁止访问.htaccess文件
  111. #location ~ /\.ht {
  112. # deny all;
  113. #}
  114. #定义404错误提示页面
  115. error_page 404 /404.html;
  116. location = /40x.html {
  117. }
  118. # 定义 50x 错误提示页面
  119. error_page 500 502 503 504 /50x.html;
  120. location = /50x.html {
  121. }
  122. }
  123. # Settings for a TLS enabled server.
  124. # 另一个虚拟主机使用混合 ip name port 的配置
  125. # server {
  126. # listen 443 ssl http2 default_server;
  127. # listen [::]:443 ssl http2 default_server;
  128. # #定义使用localhost,也可以自动定义域名访问
  129. # server_name _;
  130. # root /usr/share/nginx/html;
  131. # #ssl证书的pem文件
  132. # ssl_certificate "/etc/pki/nginx/server.crt";
  133. # #ssl证书的key文件
  134. # ssl_certificate_key "/etc/pki/nginx/private/server.key";
  135. # #设置存储session参数的缓存的类型和大小
  136. # #off:严格禁止使用会话缓存:nginx明确告知客户端会话不可重用。
  137. # #none:会话缓存是不允许的:nginx告知客户端会话可以重用,但并没有在缓存中存储会话参数。
  138. # #builtin:在OpenSSL中构建缓存;只能被一个工作进程使用。缓存的大小在会话中指定,如果没有指定大小,默认20480个会话。使用内置缓存会导致内存碎片化。
  139. # #shared:缓存在所有工作进程之间共享。缓存大小按照字节为单位指定;1MB可以存储4000个会话。每块共享内存都应该起个名字。同一块缓存可以在多个虚拟服务中使用。
  140. # ssl_session_cache shared:SSL:1m;
  141. # #指定客户端可以重用会话参数的时间
  142. # ssl_session_timeout 10m;
  143. # #密码套件
  144. # ssl_ciphers PROFILE=SYSTEM;
  145. # #设置协商加密算法时,优先使用我们服务端的加密套件,而不是客户端浏览器的加密套件。
  146. # ssl_prefer_server_ciphers on;
  147. # # 加载默认服务器块的配置文件.
  148. # include /etc/nginx/default.d/*.conf;
  149. # location / {
  150. # root html;
  151. # index index.html index.htm;
  152. # }
  153. # error_page 404 /404.html;
  154. # location = /40x.html {
  155. # }
  156. # error_page 500 502 503 504 /50x.html;
  157. # location = /50x.html {
  158. # }
  159. # }
  160. }

六、git拉取项目部署服务

  1. #初次部署拉取项目
  2. sudo mkdir -p /home/admin/app/ && chmod -R 777 /home/admin/app/
  3. cd /home/admin/app/
  4. git clone --depth=1 https://codeup.aliyun.com/5ed7d18fd1d1abe63b55e9f6/bi_meng/deep_foundation_front.git
  5. cd ./deep_foundation_front
  6. npm run install
  7. npm run build
  8. sudo nginx -s reload && systemctl restart nginx
  9. @再次拉取项目
  10. cd /home/admin/app/deep_foundation_front
  11. git pull && npm install && npm run build
  12. sudo nginx -s reload && systemctl restart nginx

快速部署nginx

  1. #快速安装常用工具
  2. #curl --silent --location https://rpm.nodesource.com/setup_12.x | sudo bash -
  3. yum -y install gcc gcc-c++ nodejs git
  4. #---------------------
  5. sudo yum -y install nginx
  6. sudo systemctl start nginx && systemctl enable nginx
  7. #---------------------
  8. systemctl start firewalld
  9. sudo firewall-cmd --permanent --zone=public --add-service=http
  10. sudo firewall-cmd --permanent --zone=public --add-service=https
  11. firewall-cmd --zone=public --add-port=7001/tcp --permanent
  12. firewall-cmd --zone=public --add-port=8080/tcp --permanent
  13. sudo firewall-cmd --reload
  14. systemctl restart firewalld
  15. #---------------------
  16. sudo mkdir -p /home/admin/app/ && chmod -R 777 /home/admin/app/
  17. cd /home/admin/app/
  18. #---------------------
  19. git clone --depth=1 https://codeup.aliyun.com/5ed7d18fd1d1abe63b55e9f6/bi_meng/deep_foundation_front.git
  20. #---------------------
  21. cd ./deep_foundation_front
  22. npm install --registry=https://registry.npm.taobao.org
  23. npm run build
  24. #最后需要编辑配置文件 vim /etc/nginx/nginx.conf
  25. #这里需要编辑配置文件,编辑完成后 sudo nginx -s reload && systemctl restart nginx

点击定位配置nginx.conf文件的位置

查看

  1. #验证 nginx 服务是否正在运行
  2. 方式1: ps aux | grep nginx
  3. 方式2: systemctl status nginx systemctl status nginx.service
  4. 方式3: service nginx status
  5. #查看启动项的服务列表
  6. systemctl list-unit-files --type=service | grep enabled
  7. #验证是否安装成功
  8. curl http://localhost
  9. #查看进程可拥有的文件描述符的数量
  10. ulimit -n
  11. #查看nginx的版本
  12. nginx -V

关闭与卸载

  1. 第一步:查看 mysql 是否在运行,如果在运行则先关闭
  2. 方式1: kill -9 <pid进程>
  3. 方式2: sudo pkill nginx
  4. 方式3: suto systemctl stop nginx
  5. 方式4: service nginx stop
  6. 第二步:移除redis
  7. yum -y remove nginx

正向代理代理客户端,反向代理代理服务器

VPN 全称Virtual Private Network,中文翻译为虚拟专用网络,通俗的讲就是中转服务

它被定义为通过一个公用网络(通常是因特网)建立一个临时的、安全的连接,是一条穿过混乱的公用网络的安全、稳定隧道。使用这条隧道可以对数据进行几倍加密达到安全使用互联网的目

  • 正向代理

image.png

  • 反向代理

image.png

安装包模式

一、安装之前

  1. 1.安装依赖 - pcre来解析正则表达式,使用zlibhttp包的内容进行gzip,openssl支持https(即在ssl协议上传输http),需要在linux安装openssl
  2. yum install -y gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel
  3. #查询所有已经安装的软件包
  4. rpm -qa | grep nginx
  5. #如果有,使用以下命令进行强制卸载
  6. rpm -e --nodeps <nginx安装过的rpm>

二、安装

  1. #2.1.下载 nginx-1.9.9 安装包,在root目录下执行
  2. wget http://nginx.org/download/nginx-1.16.1.tar.gz
  3. #2.2.解压redis安装包并且进入redis目录
  4. tar -zxvf nginx-1.16.1.tar.gz && cd nginx-1.16.1
  5. #2.3.编码安装
  6. ./configure --prefix=/usr/local/nginx && make install
  7. #make && make prefix=/usr/local/git install

三、启动

  1. 4.开启nginx进程
  2. /usr/local/nginx/sbin/nginx
  3. #重启nginx进程
  4. /usr/local/nginx/sbin/nginx -s reload

关闭和卸载

  1. #从容停止服务,这种方法较stop相比就比较温和一些了,需要进程完成当前工作后再停止。
  2. /usr/local/nginx/sbin/nginx -s quit
  3. #立即停止服务,这种方法比较强硬,无论进程是否在工作,都直接停止进程。
  4. /usr/local/nginx/sbin/nginx -s stop
  5. 第一步:查看 nginx 是否在运行,如果在运行则先关闭
  6. 方式1: kill -9 <pid进程>
  7. 方式2: sudo pkill nginx
  8. 方式3: /usr/local/nginx/sbin/nginx -s stop
  9. 第二步:nginx
  10. rm -rf /usr/local/nginx

防火墙

安装防火墙

  1. yum -y install iptables-services

防火墙查看、启动、重载

  1. #查看防火墙的状态
  2. 方式1: firewall-cmd --state
  3. 方式2: systemctl status firewalld
  4. 方式3: service firewalld status
  5. #设置systemctl启动与开机启动
  6. sudo systemctl start firewalld && systemctl enable firewalld
  7. #或 sudo service firewalld start && chkconfig firewalld on
  8. #开启防火墙
  9. 方式1: systemctl start firewalld
  10. 方式2: service firewalld start
  11. #重启防火墙
  12. 方式1: systemctl restart firewalld
  13. 方式2: service firewalld restart
  14. #关闭开机启动
  15. sudo systemctl disable firewalld
  16. #或 sudo chkconfig firewalld off
  17. #重新载入配置
  18. firewall-cmd --reload

关闭防火墙

  1. #关闭防火墙
  2. 方式1: systemctl stop firewalld
  3. 方式2: service firewalld stop

设置防火墙端口

  1. systemctl start firewalld
  2. firewall-cmd --zone=public --add-port=80/tcp --permanent
  3. firewall-cmd --zone=public --add-port=8080/tcp --permanent
  4. firewall-cmd --zone=public --add-port=8081/tcp --permanent
  5. systemctl restart firewalld
  • -zone 作用域
  • –add-port=80/tcp 添加端口,格式为:端口/通讯协议
  • –permanent 永久生效,没有此参数重启后失效


用iptables管理防火墙

安装iptables
  1. yum -y install iptables

重启防火墙,这里有两种方式重启/关闭 防火墙
  1. #启动防火墙
  2. 方式1: service iptables start
  3. 方式2: systemctl start iptables
  4. 方式3: /etc/init.d/iptables start
  5. #重启防火墙
  6. 方式1: service iptables restart
  7. 方式2: systemctl restart iptables
  8. 方式3: /etc/init.d/iptables restart
  9. #保存
  10. /etc/rc.d/init.d/iptables save
  11. #设置防火墙的开机自启
  12. 方式1: chkconfig iptables on
  13. 方式2: systemctl enable iptables
  14. #关闭防火墙的开机自启
  15. 方式1: chkconfig iptables off
  16. 方式2: systemctl disable iptables
  17. #关闭防火墙
  18. 方式1: service iptables stop
  19. 方式2: systemctl stop iptables

使用iptables管理端口
  1. #1.查看防火墙设置有没有开启80端口
  2. 方式1: iptables -L -n --line-number #可以显示规则和相对应的编号
  3. 方式2: /sbin/iptables -L -n --line-number #可以显示规则和相对应的编号
  4. #2.让防火墙开放某个端口, vim /etc/sysconfig/iptables 修改文件,增加下面那一行
  5. -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT
  6. #开放一个范围的端口3000到5000
  7. #-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 3000:5000 -j ACCEPT
  8. #iptables -A INPUT -p tcp --dport 22 -j ACCEPT
  9. #iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT
  10. #重启防火墙
  11. sudo systemctl start iptables && systemctl enable iptables

-A:参数就看成是添加一条 INPUT 的规则
-p:指定是什么协议 我们常用的tcp 协议,当然也有udp,例如53端口的DNS
–dport:就是目标端口,当数据从外部进入服务器为目标端口
–sport:数据从服务器出去,则为数据源端口
-j:就是指定是 ACCEPT接收或者DROP不接收

解决错误问题

nginx: [error] open() “/usr/local/var/run/nginx.pid” failed (2: No such file or directory)

原因 没有nginx.pid 这个文件,每次当我们停止nginx时(nginx -s stop) ,nginx 会把 /usr/local/var/run/ 路径下名为nginx.pid 的文件删掉
可以直接启动nginx,重新生成nginx.pid就可以了

  1. nginx

如果出现这个

  1. nginx: [emerg] bind() to 0.0.0.0:7001 failed (98: Address already in use)
  2. nginx: [emerg] bind() to 0.0.0.0:7001 failed (98: Address already in use)

是因为端口被占用,杀一下端口就可以了

  1. kill -9 $(lsof -i:7001 -t)

如果直接启动还是不可行,执行nginx -t查看nginx配置文件路径:

  1. $ nginx -t
  2. nginx: the configuration file /usr/local/etc/nginx/nginx.conf syntax is ok
  3. nginx: configuration file /usr/local/etc/nginx/nginx.conf test is successful

指定一下conf文件:

  1. nginx -c /usr/local/etc/nginx/nginx.conf