合 Nginx安装配置及端口转发
简介
Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好。
在我们实际开发应用中,需要了解Nginx的以下几个功能
- 正向代理
- 反向代理
- 负载均衡
- 动静分离
- 端口转发
域名简介
域名就是网站:www.dbaup.com就是域名
DNS域名解析服务器,把域名解析为ip地址。保存的就是域名和ip地址的映射关系。
一级域名:dbaup.com
二级域名:www.dbaup.com
三级域名:pic.dbaup.com
一个域名对应与一个ip地址,一个ip地址可以被多个域名绑定。
只需要买一个一级域名,后面的二级,三级域名你自己可以随便定义。
下载
http://nginx.org/en/download.html
官网提供三种版本:
Nginx官网提供了三个类型的版本
Mainline version:Mainline 是 Nginx 目前主力在做的版本,可以说是开发版
Stable version:最新稳定版,生产环境上建议使用的版本
Legacy versions:遗留的老版本的稳定版
Linux环境安装
由于nginx是基于c语言开发的,所以需要安装c语言的编译环境。
yum安装
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 | curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo yum install -y nginx* nginx-mod-devel nginx-mod-stream nginx-all-modules systemctl enable nginx systemctl start nginx systemctl status nginx -- 默认配置文件 /etc/nginx/nginx.conf -- 日志 /var/log/nginx/error.log [root@lhrxxt ~]# netstat -tulnp | grep 80 tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 23092/nginx: master tcp6 0 0 :::80 :::* LISTEN 23092/nginx: master [root@lhrxxt ~]# [root@lhrxxt ~]# nginx -V nginx version: nginx/1.20.1 built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) built with OpenSSL 1.1.1k FIPS 25 Mar 2021 TLS SNI support enabled configure arguments: --prefix=/usr/share/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --http-client-body-temp-path=/var/lib/nginx/tmp/client_body --http-proxy-temp-path=/var/lib/nginx/tmp/proxy --http-fastcgi-temp-path=/var/lib/nginx/tmp/fastcgi --http-uwsgi-temp-path=/var/lib/nginx/tmp/uwsgi --http-scgi-temp-path=/var/lib/nginx/tmp/scgi --pid-path=/run/nginx.pid --lock-path=/run/lock/subsys/nginx --user=nginx --group=nginx --with-compat --with-debug --with-file-aio --with-google_perftools_module --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_degradation_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_image_filter_module=dynamic --with-http_mp4_module --with-http_perl_module=dynamic --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-http_xslt_module=dynamic --with-mail=dynamic --with-mail_ssl_module --with-pcre --with-pcre-jit --with-stream=dynamic --with-stream_ssl_module --with-stream_ssl_preread_module --with-threads --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -m64 -mtune=generic' --with-ld-opt='-Wl,-z,relro -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -Wl,-E' [root@lhrxxt ~]# |
1、Linux release 7.6.1810 会安装nginx-1.20.1版本。
2、默认安装了端口转发模块--with-stream=dynamic
编译安装
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 | yum -y install gcc pcre pcre-devel zlib-devel openssl openssl-devel nginx-all-modules cd /soft/ wget http://nginx.org/download/nginx-1.22.1.tar.gz tar -zxvf nginx-1.22.1.tar.gz cd nginx-1.22.1 ./configure --prefix=/usr/local/nginx --with-mail --with-stream --with-stream=dynamic --with-stream_ssl_module --with-http_v2_module --with-stream_realip_module make -j8 make install echo "export PATH=$PATH:/usr/local/nginx/sbin" >> /etc/profile source /etc/profile -- 启动 nginx -t nginx -c /usr/local/nginx/conf/nginx.conf -- 或者使用nginx.service -- 日常生产环境使用nginx,编译模块按照nginx官方yum安装的模块,基本能满足95%以上的生产需求。 [root@test nginx-1.22.1]# ll /usr/local/nginx/modules/ total 1224 -rwxr-xr-x 1 root root 1249688 Feb 8 10:38 ngx_stream_module.so [root@test nginx-1.22.1]# cd .. [root@test soft]# cd /usr/local/nginx/ [root@test nginx]# ll total 20 drwxr-xr-x 2 root root 4096 Feb 8 10:38 conf drwxr-xr-x 2 root root 4096 Feb 8 10:38 html drwxr-xr-x 2 root root 4096 Feb 8 10:38 logs drwxr-xr-x 2 root root 4096 Feb 8 10:38 modules drwxr-xr-x 2 root root 4096 Feb 8 10:38 sbin [root@test nginx]# |
--with-stream 表示支持tcp和udp端口转发。
--with-stream=dynamic
与 --with-stream
的区别在于,--with-stream=dynamic
可以在 nginx 的配置文件配置动态加载模块,不需要使用该模块时可以不加载。
nginx配置systemd的service服务
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | cat > /usr/lib/systemd/system/nginx.service <<"EOF" [Unit] Description=nginx After=network.target [Service] Type=forking 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 EOF systemctl daemon-reload systemctl start nginx #启动nginx服务 systemctl status nginx #查看nginx服务状态 systemctl stop nginx #停止nginx服务 |
模块的加载
模块的加载在 nginx 的配置文件中可以配置,在配置文件中的开头部分使用 load_module 加载模块:
1 | load_module /usr/local/nginx/modules/ngx_stream_module.so; |
模块加载也可以单独放在一个或多个文件中,然后通过 include 引入到 nginx.conf 中
1 | include /usr/share/nginx/modules/*.conf; |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | [root@HF-Server82 ~]# cat /usr/share/nginx/modules/*.conf; load_module "/usr/lib64/nginx/modules/ngx_http_image_filter_module.so"; load_module "/usr/lib64/nginx/modules/ngx_http_perl_module.so"; load_module "/usr/lib64/nginx/modules/ngx_http_xslt_filter_module.so"; load_module "/usr/lib64/nginx/modules/ngx_mail_module.so"; load_module "/usr/lib64/nginx/modules/ngx_stream_module.so"; [root@HF-Server82 ~]# ll /usr/share/nginx/modules/*.conf -rw-r--r-- 1 root root 72 Nov 11 00:58 /usr/share/nginx/modules/mod-http-image-filter.conf -rw-r--r-- 1 root root 64 Nov 11 00:58 /usr/share/nginx/modules/mod-http-perl.conf -rw-r--r-- 1 root root 71 Nov 11 00:58 /usr/share/nginx/modules/mod-http-xslt-filter.conf -rw-r--r-- 1 root root 59 Nov 11 00:58 /usr/share/nginx/modules/mod-mail.conf -rw-r--r-- 1 root root 61 Nov 11 00:58 /usr/share/nginx/modules/mod-stream.conf [root@HF-Server82 ~]# cat /usr/share/nginx/modules/mod-stream.conf load_module "/usr/lib64/nginx/modules/ngx_stream_module.so"; [root@HF-Server82 ~]# |
编译选项
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 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 | [root@test nginx-1.22.1]# ./configure --help --help print this message --prefix=PATH set installation prefix --sbin-path=PATH set nginx binary pathname --modules-path=PATH set modules path --conf-path=PATH set nginx.conf pathname --error-log-path=PATH set error log pathname --pid-path=PATH set nginx.pid pathname --lock-path=PATH set nginx.lock pathname --user=USER set non-privileged user for worker processes --group=GROUP set non-privileged group for worker processes --build=NAME set build name --builddir=DIR set build directory --with-select_module enable select module --without-select_module disable select module --with-poll_module enable poll module --without-poll_module disable poll module --with-threads enable thread pool support --with-file-aio enable file AIO support --with-http_ssl_module enable ngx_http_ssl_module --with-http_v2_module enable ngx_http_v2_module --with-http_realip_module enable ngx_http_realip_module --with-http_addition_module enable ngx_http_addition_module --with-http_xslt_module enable ngx_http_xslt_module --with-http_xslt_module=dynamic enable dynamic ngx_http_xslt_module --with-http_image_filter_module enable ngx_http_image_filter_module --with-http_image_filter_module=dynamic enable dynamic ngx_http_image_filter_module --with-http_geoip_module enable ngx_http_geoip_module --with-http_geoip_module=dynamic enable dynamic ngx_http_geoip_module --with-http_sub_module enable ngx_http_sub_module --with-http_dav_module enable ngx_http_dav_module --with-http_flv_module enable ngx_http_flv_module --with-http_mp4_module enable ngx_http_mp4_module --with-http_gunzip_module enable ngx_http_gunzip_module --with-http_gzip_static_module enable ngx_http_gzip_static_module --with-http_auth_request_module enable ngx_http_auth_request_module --with-http_random_index_module enable ngx_http_random_index_module --with-http_secure_link_module enable ngx_http_secure_link_module --with-http_degradation_module enable ngx_http_degradation_module --with-http_slice_module enable ngx_http_slice_module --with-http_stub_status_module enable ngx_http_stub_status_module --without-http_charset_module disable ngx_http_charset_module --without-http_gzip_module disable ngx_http_gzip_module --without-http_ssi_module disable ngx_http_ssi_module --without-http_userid_module disable ngx_http_userid_module --without-http_access_module disable ngx_http_access_module --without-http_auth_basic_module disable ngx_http_auth_basic_module --without-http_mirror_module disable ngx_http_mirror_module --without-http_autoindex_module disable ngx_http_autoindex_module --without-http_geo_module disable ngx_http_geo_module --without-http_map_module disable ngx_http_map_module --without-http_split_clients_module disable ngx_http_split_clients_module --without-http_referer_module disable ngx_http_referer_module --without-http_rewrite_module disable ngx_http_rewrite_module --without-http_proxy_module disable ngx_http_proxy_module --without-http_fastcgi_module disable ngx_http_fastcgi_module --without-http_uwsgi_module disable ngx_http_uwsgi_module --without-http_scgi_module disable ngx_http_scgi_module --without-http_grpc_module disable ngx_http_grpc_module --without-http_memcached_module disable ngx_http_memcached_module --without-http_limit_conn_module disable ngx_http_limit_conn_module --without-http_limit_req_module disable ngx_http_limit_req_module --without-http_empty_gif_module disable ngx_http_empty_gif_module --without-http_browser_module disable ngx_http_browser_module --without-http_upstream_hash_module disable ngx_http_upstream_hash_module --without-http_upstream_ip_hash_module disable ngx_http_upstream_ip_hash_module --without-http_upstream_least_conn_module disable ngx_http_upstream_least_conn_module --without-http_upstream_random_module disable ngx_http_upstream_random_module --without-http_upstream_keepalive_module disable ngx_http_upstream_keepalive_module --without-http_upstream_zone_module disable ngx_http_upstream_zone_module --with-http_perl_module enable ngx_http_perl_module --with-http_perl_module=dynamic enable dynamic ngx_http_perl_module --with-perl_modules_path=PATH set Perl modules path --with-perl=PATH set perl binary pathname --http-log-path=PATH set http access log pathname --http-client-body-temp-path=PATH set path to store http client request body temporary files --http-proxy-temp-path=PATH set path to store http proxy temporary files --http-fastcgi-temp-path=PATH set path to store http fastcgi temporary files --http-uwsgi-temp-path=PATH set path to store http uwsgi temporary files --http-scgi-temp-path=PATH set path to store http scgi temporary files --without-http disable HTTP server --without-http-cache disable HTTP cache --with-mail enable POP3/IMAP4/SMTP proxy module --with-mail=dynamic enable dynamic POP3/IMAP4/SMTP proxy module --with-mail_ssl_module enable ngx_mail_ssl_module --without-mail_pop3_module disable ngx_mail_pop3_module --without-mail_imap_module disable ngx_mail_imap_module --without-mail_smtp_module disable ngx_mail_smtp_module --with-stream enable TCP/UDP proxy module --with-stream=dynamic enable dynamic TCP/UDP proxy module --with-stream_ssl_module enable ngx_stream_ssl_module --with-stream_realip_module enable ngx_stream_realip_module --with-stream_geoip_module enable ngx_stream_geoip_module --with-stream_geoip_module=dynamic enable dynamic ngx_stream_geoip_module --with-stream_ssl_preread_module enable ngx_stream_ssl_preread_module --without-stream_limit_conn_module disable ngx_stream_limit_conn_module --without-stream_access_module disable ngx_stream_access_module --without-stream_geo_module disable ngx_stream_geo_module --without-stream_map_module disable ngx_stream_map_module --without-stream_split_clients_module disable ngx_stream_split_clients_module --without-stream_return_module disable ngx_stream_return_module --without-stream_set_module disable ngx_stream_set_module --without-stream_upstream_hash_module disable ngx_stream_upstream_hash_module --without-stream_upstream_least_conn_module disable ngx_stream_upstream_least_conn_module --without-stream_upstream_random_module disable ngx_stream_upstream_random_module --without-stream_upstream_zone_module disable ngx_stream_upstream_zone_module --with-google_perftools_module enable ngx_google_perftools_module --with-cpp_test_module enable ngx_cpp_test_module --add-module=PATH enable external module --add-dynamic-module=PATH enable dynamic external module --with-compat dynamic modules compatibility --with-cc=PATH set C compiler pathname --with-cpp=PATH set C preprocessor pathname --with-cc-opt=OPTIONS set additional C compiler options --with-ld-opt=OPTIONS set additional linker options --with-cpu-opt=CPU build for the specified CPU, valid values: pentium, pentiumpro, pentium3, pentium4, athlon, opteron, sparc32, sparc64, ppc64 --without-pcre disable PCRE library usage --with-pcre force PCRE library usage --with-pcre=DIR set path to PCRE library sources --with-pcre-opt=OPTIONS set additional build options for PCRE --with-pcre-jit build PCRE with JIT compilation support --without-pcre2 do not use PCRE2 library --with-zlib=DIR set path to zlib library sources --with-zlib-opt=OPTIONS set additional build options for zlib --with-zlib-asm=CPU use zlib assembler sources optimized for the specified CPU, valid values: pentium, pentiumpro --with-libatomic force libatomic_ops library usage --with-libatomic=DIR set path to libatomic_ops library sources --with-openssl=DIR set path to OpenSSL library sources --with-openssl-opt=OPTIONS set additional build options for OpenSSL --with-debug enable debug logging |
docker安装
https://hub.docker.com/_/nginx
1 2 | docker pull nginx:1.22.1 docker run -itd --name nginx1 -p 8080:80 -v /tmp/:/usr/share/nginx/html:ro nginx:1.22.1 |
Windows环境安装
直接下载解压即可。
Nginx常用命令
在执行下面的指令时,都需要在/usr/local/nginx/sbin/目录下执行。
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 | -- 查看版本 ./nginx -v -- 查看版本和启用的模块 nginx -V -- 检查配置文件 ./nginx -t -- 启动 ./nginx -- 停止 ./nginx -s stop -- 重新加载配置文件 ./nginx -s reload systemctl daemon-reload systemctl start nginx #启动nginx服务 systemctl status nginx #查看nginx服务状态 systemctl stop nginx #停止nginx服务 systemctl restart nginx #重启nginx服务 systemctl reload nginx #重新读取nginx配置(这个最常用,不用停止nginx服务就能使修改的配置生效) systemctl is-enabled nginx #查看nginx是否开机自启动 systemctl enable nginx #设置nginx开机自启动 systemctl disable nginx #取消nginx开机自启动 |
配置文件详解
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #user nobody;#配置用户或者用户组,默认为nobody worker_processes 2;#允许生成的进程数,默认为1 #制定日志路径,级别。这个设置可以放入全局块,http块,server块, #级别以此为:debug|info|notice|warn|error|crit|alert|emerg #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid;#指定nginx进程运行文件存放地址 events { worker_connections 1024; #最大连接数,默认为512 accept_mutex on; #设置网路连接序列化,防止惊群现象发生,默认为on multi_accept on; #设置一个进程是否同时接受多个网络连接,默认为off #use epoll; #事件驱动模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport } |
配置端口转发
1. 将域名转发到本地端口
1 2 3 4 5 6 7 8 9 10 11 12 | server{ listen 80; server_name baidu.com; index index.php index.html index.htm; location / { proxy_pass http://127.0.0.1:8080; # 转发规则 proxy_set_header Host $proxy_host; # 修改转发请求头,让8080端口的应用可以受到真实的请求 proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } |
这样访问 http://baidu.com 时就会转发到本地的 8080 端口
2. 将域名转发到另一个域名
1 2 3 4 5 6 7 8 9 10 11 12 | server{ listen 80; server_name baidu.com; index index.php index.html index.htm; location / { proxy_pass http://www.google.com; proxy_set_header Host $proxy_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } |
这样访问 http://baidu.com 时就会转发到 http://www.google.com
3. 本地一个端口转发到另一个端口或另一个域名
1 2 3 4 5 6 7 8 9 10 11 | server{ listen 80; server_name 127.0.0.1; location / { proxy_pass http://127.0.0.1:8080; # 或 http://www.baidu.com proxy_set_header Host $proxy_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } |
这样访问 http://127.0.0.1 时就会转发到本地的 8080 端口或 http://www.baidu.com
4. 加 / 与不加 /
在配置proxy_pass代理转发时,如果后面的url加/,表示绝对根路径;如果没有/,表示相对路径
- 加 /
1 2 3 4 | server_name baidu.com location /data/ { proxy_pass http://127.0.0.1/; } |
访问 http://baidu.com/data/index.html 会转发到 http://127.0.0.1/index.html
- 不加 /
1 2 3 4 | server_name baidu.com location /data/ { proxy_pass http://127.0.0.1; } |
访问 http://baidu.com/data/index.html 会转发到 http://127.0.0.1/data/index.html
5. 日志设置
1 2 3 4 5 6 7 8 9 10 | server { listen 8080; server_name 127.0.0.1; access_log /var/log/nginx/{task}_access.log; # task可以为这个项目的名字,用于区分日志,方便查询 error_log /var/log/nginx/{task}_error.log; location / { proxy_pass http://127.0.0.1:60001; } } |