一、nginx常用命令
- 查看版本号
[root@localhost sbin]# ./nginx -v nginx version: nginx/1.21.6
- 查看nginx状态
[root@localhost sbin]# ps -ef | grep nginx nginx 1218 1126 0 05:31 ? 00:00:00 php-fpm: pool www nginx 1219 1126 0 05:31 ? 00:00:00 php-fpm: pool www nginx 1220 1126 0 05:31 ? 00:00:00 php-fpm: pool www nginx 1223 1126 0 05:31 ? 00:00:00 php-fpm: pool www nginx 1227 1126 0 05:31 ? 00:00:00 php-fpm: pool www root 6725 5310 0 05:48 pts/0 00:00:00 grep --color=auto nginx [root@localhost sbin]#
二、nginx配置文件
位置/usr/local/nginx/conf/nginx.conf
配置文件主要分为以下几个部分
- 全局块: 配置影响nginx服务器整体运行的指令。比如nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等
- events块:配置影响nginx服务器或与用户的网络连接
- http块:可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。这是服务器配置最频繁的部分
三、nginx配置实例1 反向代理
实现效果:打开浏览器,在浏览器地址栏输入地址www.123.com,跳转到linux系统tomcat主页面中
- linux系统安装tomcat,使用默认端口8080
进入192.168.184.138,下载tomcat包并进行解压
[root@localhost ~]# cd /usr/local/src [root@localhost src]# wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.62/bin/apache-tomcat-9.0.62.exe [root@localhost src]# tar -xvf apache-tomcat-9.0.62tar.gz [root@localhost src]# ls apache-tomcat-9.0.62 apache-tomcat-9.0.62.tar.gz cmake-3.21.0 cmake-3.21.0.tar.gz nginx-1.21.6 nginx-1.21.6.tar.gz php-7.3.17 php-7.3.17.tar.gz [root@localhost src]#
查看jdk环境,系统自带一个,就不进行重装了
[root@localhost src]# java -version openjdk version "1.8.0_262" OpenJDK Runtime Environment (build 1.8.0_262-b10) OpenJDK 64-Bit Server VM (build 25.262-b10, mixed mode) [root@localhost src]#
进入bin目录启动tomcat服务
[root@localhost src]# cd apache-tomcat-9.0.62 [root@localhost apache-tomcat-9.0.62]# ls bin BUILDING.txt conf CONTRIBUTING.md lib LICENSE logs NOTICE README.md RELEASE-NOTES RUNNING.txt temp webapps work [root@localhost apache-tomcat-9.0.62]# cd bin [root@localhost bin]# ls bootstrap.jar catalina-tasks.xml commons-daemon.jar configtest.sh digest.sh setclasspath.bat shutdown.sh tomcat-juli.jar tool-wrapper.sh catalina.bat ciphers.bat commons-daemon-native.tar.gz daemon.sh makebase.bat setclasspath.sh startup.bat tomcat-native.tar.gz version.bat catalina.sh ciphers.sh configtest.bat digest.bat makebase.sh shutdown.bat startup.sh tool-wrapper.bat version.sh [root@localhost bin]# ./startup.sh Using CATALINA_BASE: /usr/local/src/apache-tomcat-9.0.62 Using CATALINA_HOME: /usr/local/src/apache-tomcat-9.0.62 Using CATALINA_TMPDIR: /usr/local/src/apache-tomcat-9.0.62/temp Using JRE_HOME: /usr Using CLASSPATH: /usr/local/src/apache-tomcat-9.0.62/bin/bootstrap.jar:/usr/local/src/apache-tomcat-9.0.62/bin/tomcat-juli.jar Using CATALINA_OPTS: Tomcat started. [root@localhost bin]#
查看日志看是否启动成功
[root@localhost bin]# cd .. [root@localhost apache-tomcat-9.0.62]# cd logs [root@localhost logs]# ls catalina.2022-05-11.log catalina.out host-manager.2022-05-11.log localhost.2022-05-11.log localhost_access_log.2022-05-11.txt manager.2022-05-11.log [root@localhost logs]# tail -f catalina.out 11-May-2022 19:16:29.350 INFO [main] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/usr/local/src/apache-tomcat-9.0.62/webapps/docs] 11-May-2022 19:16:29.366 INFO [main] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/usr/local/src/apache-tomcat-9.0.62/webapps/docs] has finished in [15] ms 11-May-2022 19:16:29.366 INFO [main] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/usr/local/src/apache-tomcat-9.0.62/webapps/examples] 11-May-2022 19:16:29.576 INFO [main] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/usr/local/src/apache-tomcat-9.0.62/webapps/examples] has finished in [209] ms 11-May-2022 19:16:29.576 INFO [main] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/usr/local/src/apache-tomcat-9.0.62/webapps/host-manager] 11-May-2022 19:16:29.595 INFO [main] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/usr/local/src/apache-tomcat-9.0.62/webapps/host-manager] has finished in [19] ms 11-May-2022 19:16:29.595 INFO [main] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/usr/local/src/apache-tomcat-9.0.62/webapps/manager] 11-May-2022 19:16:29.632 INFO [main] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/usr/local/src/apache-tomcat-9.0.62/webapps/manager] has finished in [37] ms 11-May-2022 19:16:29.635 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-8080"] 11-May-2022 19:16:29.646 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in [529] milliseconds
开放8080端口,其他端口已经提前开了,比如80/tcp 8081/tcp 8082/tcp 9001/tcp
[root@localhost logs]# firewall-cmd --add-port=8080/tcp --permanent success [root@localhost logs]# systemctl restart firewalld [root@localhost logs]# firewall-cmd --reload success [root@localhost conf]# firewall-cmd --list-all public (active) target: default icmp-block-inversion: no interfaces: ens33 sources: services: dhcpv6-client http ssh ports: 8080/tcp 80/tcp 8081/tcp 8082/tcp 9001/tcp protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules: You have new mail in /var/spool/mail/root [root@localhost conf]#
在本地浏览器输入http://192.168.184.138:8080,查看是否安装成功
- 对windows的host文件进行配置,配置域名www.123.com映射的ip地址
找到host文件,进行编辑,最后一行加上ip 域名
- 在nginx进行请求转发的配置(即反向代理配置)
找到nginx配置文件/usr/local/nginx/conf/nginx.conf
[root@localhost src]# cd /usr/local/nginx/conf [root@localhost conf]# ls fastcgi.conf fastcgi_params koi-utf mime.types nginx.conf scgi_params uwsgi_params win-utf fastcgi.conf.default fastcgi_params.default koi-win mime.types.default nginx.conf.default scgi_params.default uwsgi_params.default [root@localhost conf]# vim nginx.conf
把sever_name改成192.168.184.138
在location中添加proxy_pass http://127.0.0.1:8080;
启动nginx进行测试,在启动时报错nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use),是因为80端口被占用,使用fuser -k 80/tcp杀死进程即可
[root@localhost conf]# /usr/local/nginx/sbin/nginx nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use) nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use) nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use) nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use) nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use) nginx: [emerg] still could not bind() [root@localhost conf]# fuser -k 80/tcp 80/tcp: 1156 1222 1224 1225 1226 11227 11228 11231 11232 11233 11234 [root@localhost conf]# /usr/local/nginx/sbin/nginx [root@localhost conf]# ps -ef | grep nginx nginx 1227 1127 0 19:01 ? 00:00:00 php-fpm: pool www nginx 1230 1127 0 19:01 ? 00:00:00 php-fpm: pool www nginx 1231 1127 0 19:01 ? 00:00:00 php-fpm: pool www nginx 1233 1127 0 19:01 ? 00:00:00 php-fpm: pool www nginx 1236 1127 0 19:01 ? 00:00:00 php-fpm: pool www root 19547 1 0 20:20 ? 00:00:00 nginx: master process /usr/local/nginx/sbin/nginx nobody 19548 19547 0 20:20 ? 00:00:00 nginx: worker process root 20151 3779 0 20:23 pts/1 00:00:00 grep --color=auto nginx [root@localhost conf]#
浏览器进行测试,www.123.com直接访问的是192.168.184.138:80,即nginx的80端口,而通过80端口,nginx转发到了8080端口,所以访问到了tomcat的192.168.184.138:8080
四、nginx配置实例2 反向代理
实现效果:使用nginx反向代理,根据访问的路径跳转到不同端口的服务中
nginx监听端口为9001
访问http://http://192.168.184.139:9001/edu/ 直接跳转到127.0.0.1:8080
访问http://http://192.168.184.139:9001/vod/ 直接跳转到127.0.0.1:8081
- 准备两个tomcat服务器,一个8080端口,一个8081端口
8080的刚才已经弄好了,所以再准备一个8081就可以
在/usr/local/src下新建一个tomcat8081文件夹,放入tomcat安装包并进行解压
修改这个tomcat的配置文件/usr/local/src/tomcat8081/apache-tomcat-9.0.62/conf/server.xml,把端口改成8081
[root@localhost apache-tomcat-9.0.62]# cd conf [root@localhost conf]# ls -al total 232 drwx------. 2 root root 238 Mar 31 07:34 . drwxr-xr-x. 9 root root 220 May 12 00:27 .. -rw-------. 1 root root 12953 Mar 31 07:34 catalina.policy -rw-------. 1 root root 7308 Mar 31 07:34 catalina.properties -rw-------. 1 root root 1400 Mar 31 07:34 context.xml -rw-------. 1 root root 1149 Mar 31 07:34 jaspic-providers.xml -rw-------. 1 root root 2313 Mar 31 07:34 jaspic-providers.xsd -rw-------. 1 root root 4144 Mar 31 07:34 logging.properties -rw-------. 1 root root 7580 Mar 31 07:34 server.xml -rw-------. 1 root root 2756 Mar 31 07:34 tomcat-users.xml -rw-------. 1 root root 2558 Mar 31 07:34 tomcat-users.xsd -rw-------. 1 root root 172359 Mar 31 07:34 web.xml [root@localhost conf]# vim server.xml
修改后启动tomcat
[root@localhost conf]# vim server.xml [root@localhost conf]# cd .. [root@localhost apache-tomcat-9.0.62]# cd bin [root@localhost bin]# ls bootstrap.jar catalina-tasks.xml commons-daemon.jar configtest.sh digest.sh setclasspath.bat shutdown.sh tomcat-juli.jar tool-wrapper.sh catalina.bat ciphers.bat commons-daemon-native.tar.gz daemon.sh makebase.bat setclasspath.sh startup.bat tomcat-native.tar.gz version.bat catalina.sh ciphers.sh configtest.bat digest.bat makebase.sh shutdown.bat startup.sh tool-wrapper.bat version.sh [root@localhost bin]# ./startup.sh Using CATALINA_BASE: /usr/local/src/tomcat8081/apache-tomcat-9.0.62 Using CATALINA_HOME: /usr/local/src/tomcat8081/apache-tomcat-9.0.62 Using CATALINA_TMPDIR: /usr/local/src/tomcat8081/apache-tomcat-9.0.62/temp Using JRE_HOME: /usr Using CLASSPATH: /usr/local/src/tomcat8081/apache-tomcat-9.0.62/bin/bootstrap.jar:/usr/local/src/tomcat8081/apache-tomcat-9.0.62/bin/tomcat-juli.jar Using CATALINA_OPTS: Tomcat started. [root@localhost bin]#
在浏览器看看8080和8081能否访问
- 创建文件夹和测试页面
tomcat8080下的webapps创建一个edu文件夹
tomcat8081下的webapps创建一个vod文件夹
[root@localhost bin]# cd /usr/local/src/apache-tomcat-9.0.62/webapps [root@localhost webapps]# mkdir edu [root@localhost webapps]# cd /usr/local/src/tomcat8081/apache-tomcat-9.0.62/webapps [root@localhost webapps]# mkdir vod [root@localhost webapps]#
在两个webapp下分别写两个html文件进行测试
8081的也类似
- 找到nginx的配置文件/usr/local/nginx/conf/nginx.conf进行配置
添加这部分代码
记得开放端口号,这里之前已经开放过了
[root@localhost conf]# firewall-cmd --list-all public (active) target: default icmp-block-inversion: no interfaces: ens33 sources: services: dhcpv6-client http ssh ports: 8080/tcp 80/tcp 8081/tcp 8082/tcp 9001/tcp protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules: [root@localhost conf]#
重启nginx
[root@localhost conf]# cd /usr/local/nginx [root@localhost nginx]# cd sbin [root@localhost sbin]# ls nginx [root@localhost sbin]# ./nginx -s stop [root@localhost sbin]# ./nginx [root@localhost sbin]#
在浏览器中输入网址测试
五、nginx配置实例3 负载均衡
实现效果:浏览器地址栏输入地址http://192.168.184.139:9001/edu/a.html,负载均衡效果,平均8080和8081端口中
- 准备两台tomcat服务器,一台8080,一台8081
这点在前面就准备过了,所以不用管了 - 在两台tomcat里面webapp目录中,创建名称是edu的文件夹,在edu文件夹中创建页面a.html,用于测试
- 在nginx配置文件中进行配置
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
在http中添加一个模块
再修改server部分
- 重启nginx
[root@localhost ~]# cd /usr/local/nginx/ [root@localhost nginx]# ls client_body_temp conf fastcgi_temp html logs proxy_temp sbin scgi_temp uwsgi_temp [root@localhost nginx]# cd sbin [root@localhost sbin]# ls nginx [root@localhost sbin]# ./nginx -s stop [root@localhost sbin]# ./nginx [root@localhost sbin]#
- 在浏览器中输入网址进行测试
刷新一下
再刷新又显示8080,可以看出请求分担到8080和8081中了
nginx分配服务器策略
-
轮询:这种方式是默认的分配方式,每个请求按时间顺序挨个分配到不同的后端服务器,如果出现某一台后端服务器down掉的情况,会自动进行剔除。
-
weight:即权重分配,权重越大,服务器被分配的客户端请求就越多,默认weight是1
-
ip_hash:每个请求按访问ip的hash结果分配,每个访客就会固定访问一个后端服务器,可以解决session共享的问题
-
fair(第三方):这种分配方式是按服务器的响应时间来分配请求的,响应时间短的优先分配
六、nginx配置实例4 动静分离
动静分离的目的是提高网站的响应速度,减轻程序服务器(Tomcat,Jboss等)的负载,对于静态资源,如图片、js、css等文件,可以在反向代理服务器中进行缓存,这样浏览器在请求一个静态资源时,代理服务器就可以直接处理,而不用将请求转发给后端服务器。对于用户请求的动态文件,如servlet、jsp,则转发给Tomcat,Jboss服务器处理,这就是动静分离。
常用方法是把静态文件设立成单独的域名,放在独立的服务器上
1.在linux系统中准备静态资源,用于后期访问
根目录下新建一个文件夹data,data下新建两个目录www和image,www下放一个html文件,image下放一个图片
[root@localhost ~]# cd / [root@localhost /]# ls bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var [root@localhost /]# mkdir data [root@localhost /]# cd data [root@localhost data]# mkdir www [root@lo.calhost data]# mkdir image [root@localhost data]# ls image www [root@localhost data]#
2.修改nginx配置文件 vim /usr/local/nginx/conf/nginx.conf
autoindex on的作用就是在访问 /image 时,可以显示目录里面的内容
3.重启nginx
4.浏览器进行测试
https://192.168.184.139/image/1.jpg
https://192.168.184.139/www/a.html



