nginx的安装与配置

Nginx能帮我们实现哪些事情

  1. 反向代理
  2. 负载均衡
  3. 微服务网关入口
  4. 静态资源服务器
  5. 对我们网站防护,安全策略,熔断,防止ddos攻击、限流

正向代理与反向代理的区别

  • 正向代理是隐藏用户行为
  • 反向代理是隐藏真实服务器

Ngxin 安装

1.添加Nginx到YUM源

添加CentOS 7 Nginx yum资源库,打开终端,使用以下命令:

1
sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
  • 如果报如下错误,并且会卡住无法使用 ctrl+c 终止程序,可使用如下方法

    1
    warning: /var/tmp/rpm-tmp.1pXoTB: Header V4 RSA/SHA1 Signature, key ID 7bd9bf62: NOKEY

    使用如下方法:

    删除rpm数据文件后再重建rpm数据文件:

    1
    rm -f /var/lib/rpm/__db.00*

    删除 .rpm.lock

    1
    rm -f .rpm.lock

    重建rpm数据文件

    1
    rpm -vv --rebuilddb

    然后继续后面的操作

2.安装Nginx

在你的CentOS 7 服务器中使用yum命令从Nginx源服务器中获取来安装Nginx:

1
sudo yum install -y nginx

3.启动Nginx

刚安装的Nginx不会自行启动。运行Nginx:

1
sudo systemctl start nginx.service

如果一切进展顺利的话,现在你可以通过你的域名或IP来访问你的Web页面来预览一下Nginx的默认页面;

image-20240301165011366

4.CentOS 7 开机启动Nginx

1
sudo systemctl enable nginx.service

5.防火墙配置

Centos升级到7之后,发现无法使用iptables控制Linuxs的端口,google之后发现Centos 7使用firewalld代替了原来的iptables。下面记录如何使用firewalld开放Linux端口:

1
firewall-cmd --zone=public --add-port=80/tcp --permanent

命令含义:

–zone #作用域

–add-port=80/tcp #添加端口,格式为:端口/通讯协议

–permanent #永久生效,没有此参数重启后失效

6.重启防火墙

1
firewall-cmd --reload

注:详细信息可以参考以下资料:

centos-7-open-firewall-port

Red_Hat_Enterprise_Linux/7/html/Security_Guide/sec-Using_Firewalls.html

7.Linux查看公网IP

您可以运行以下命令来显示你的服务器的公共IP地址:

1
ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/130567.html 原文链接:https://javaforall.cn

来源于全栈程序员必看

Nginx 配置

1.Nginx配置信息

  • 网站文件存放默认目录

    1
    /usr/share/nginx/html
  • 网站默认站点配置

    1
    /etc/nginx/conf.d/default.conf
  • 自定义Nginx站点配置文件存放目录

    1
    /etc/nginx/conf.d/
  • Nginx全局配置

    1
    /etc/nginx/nginx.conf
  • Nginx启动

    1
    nginx -c nginx.conf

在这里你可以改变设置用户运行Nginx守护程序进程一样,和工作进程的数量得到了Nginx正在运行,等等。

2.全局配置

如果不需要多个域名配置,可以直接再nginx.conf里将server配置好

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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
# For more information on configuration, see:
# * Official English Documentation: http://nginx.org/en/docs/
# * Official Russian Documentation: http://nginx.org/ru/docs/

#user nginx;
user root;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;

events {
worker_connections 1024;
}

http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';

# log的存放位置
access_log /var/log/nginx/access.log main;

sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 4096;

include /etc/nginx/mime.types;
default_type application/octet-stream;

# Load modular configuration files from the /etc/nginx/conf.d directory.
# See http://nginx.org/en/docs/ngx_core_module.html#include
# for more information.
include /etc/nginx/conf.d/*.conf;

server {
# 监听ipv4地址端口
listen 80;
# 监听ipv6地址端口
listen [::]:80;
# server_name不能重复,此处为http协议代理的域名,与下方的https协议代理的域名重复,启动时则会报错
#server_name blog.test.top;
# 需要代理的项目存放的位置
root /home/top/test/blog;

# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;

# 需要代理的`ip地址/域名:端口`
location / {
proxy_pass http://blog.test.top:4000;
}

error_page 404 /404.html;
location = /404.html {
}

error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}

# Settings for a TLS enabled server.

server {
# 监听ipv4地址端口
listen 443 ssl http2;
# 监听ipv6地址端口
listen [::]:443 ssl http2;
# 填写需要代理的域名
server_name blog.test.top;
# 需要代理的项目存放的位置
root /home/top/test/blog;

# ssl的公钥位置,可以是cer文件
ssl_certificate "/home/test/ssl/cert.pem";
# ssl的密钥位置
ssl_certificate_key "/home/test/ssl/cert.key";
ssl_session_cache shared:SSL:5m;
ssl_session_timeout 10m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;

# Load configuration files for the default server block.
# 存放配置文件的默认位置
include /etc/nginx/default.d/*.conf;

# 需要代理的`ip地址/域名:端口`
location / {
proxy_pass http://blog.test.top:4000;
}

error_page 404 /404.html;
location = /40x.html {
}

error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}

# 此处为重定向域名,监听到server_name的域名的端口为80时,则重定向到`rewrite`的地址上
server {
listen 80;
server_name blog.test.top;
rewrite ^(.*)$ https://blog.test.top permanent;
}

}

Nginx日志输出

Nginx域名配置及https的ssl证书配置

域名配置

  1. 购买域名

    • 阿里云或者腾讯云这类的运营商都是可以购买域名的,便宜的一年十几块到三十几块都是有的

      Snipaste_2024-03-05_15-12-04

    • 域名解析

      购买完域名后需要配置域名的解析地址

      以阿里云为例,右上角控制台->资源概览下面的域名

      Snipaste_2024-03-05_15-15-58

      右侧域名列表,找到刚刚购买的域名点击解析

      Snipaste_2024-03-05_15-19-05

      添加记录

      Snipaste_2024-03-05_15-21-31

      主机记录以www为例

      Snipaste_2024-03-05_15-24-24

      记录类型选择a,为a时记录值为你的服务器ipv4地址,主机记录为你的二级域名,你购买的 xxx.com 为你的一级域名,主机记录可以随便填,如为 www 则访问域名时应为 www.xxx.com

      配置好后可以以 domain:port 的方式进行访问已在服务器上启动的项目,此时为http协议的地址

    • 使用 Nginx 反向代理项目

      /etc/nginx 目录创建一个 domain.d 文件夹,用来配置域名,若需要代理的服务不多,可直接在 nginx.conf 内进行配置

      如果与我一样新创建了一个 Nginx 配置文件夹,则需要在 nginx.conf 内进行导入配置文件

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      user root;
      worker_processes auto;
      error_log /var/log/nginx/error.log;
      pid /run/nginx.pid;

      # Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
      include /usr/share/nginx/modules/*.conf;

      #### 此处为加入的一行配置
      include /etc/nginx/domain.d/*.conf;
      #### 下面为代理的配置,可在 nginx.conf 里进行配置,也可以新建conf文件进行配置
      server{
      listen 80;
      listen [::]:80;
      ## server_name为域名
      server_name www.xxx.com;

      location / {
      proxy_pass http://www.xxx.com:8080;
      }
      }

      配置好了之后可以使用 http://www.xxx.com 进行访问,此时还不能使用 https 进行访问,需要配置 ssl证书 之后才能使用 https协议

    • Nginx 的 https 配置

      同 http协议 代理相同配置,配置的内容有所变化,

      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
      server {
      listen 443 ssl http2;
      listen [::]:443 ssl http2;
      server_name www.xxx.com;

      ssl_certificate "/root/ssl/xxx.com/www/www.xxx.com.pem";
      ssl_certificate_key "/root/ssl/xxx.com/www/www.xxx.com.key";
      ssl_session_cache shared:SSL:5m;
      ssl_session_timeout 10m;
      ssl_ciphers HIGH:!aNULL:!MD5;
      ssl_prefer_server_ciphers on;

      # Load configuration files for the default server block.
      include /etc/nginx/default.d/*.conf;

      location / {
      proxy_pass http://www.xxx.com:8080;
      }
      }

      server {
      listen 80;
      server_name www.xxx.com;
      rewrite ^(.*)$ https://www.xxx.com permanent;
      }

    server_name不能重复,否则会报错,重定向server块是指定需要重定向的代理server

    配置好 https 的ssl证书后重启 Nginx,就可以正常使用https进行访问,监听80端口之后,使用http协议进行访问会重定向到 https 协议的地址下,若没配置成功,使用 https协议 进行放回会报不安全