기술나눔

nginx 정방향 프록시 및 역방향 프록시

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

nginx 정방향 프록시 및 역방향 프록시

정방향 프록시 및 캐시 구성:
프록시: 클라이언트는 더 이상 서버에 직접 액세스하지 않고 프록시 서버를 통해 서버에 액세스합니다.

순방향 프록시: 클라이언트를 향하여 프록시 서버의 IP 주소를 통해 대상 서버에 액세스합니다.
서버는 프록시 서버의 주소만 알고 있으며 실제 클라이언트 IP는 숨겨질 수 있습니다. (과학인터넷)

여기에 이미지 설명을 삽입하세요.

여기에 이미지 설명을 삽입하세요.

버퍼 영역을 256으로 설정하고 크기를 4K로 설정합니다.
프록시_최대_임시_파일_크기 0
#nginx 서버가 프록시 역할을 할 때 응답 데이터를 임시로 저장하는 최대 임시 파일 크기는 0입니다. 0은 임시 파일이 사용되지 않음을 의미합니다.
프록시 캐시 유효 시간 200 302 1m;
#상태코드가 200, 302인 경우 캐시 유효기간은 1분입니다.
프록시_캐시_유효 301 1h;
#상태코드가 301일 경우 캐시 유효기간은 1시간입니다.
proxy_cache_valid는 1m입니다.
#위의 상태 코드 반환 값 외에도 다른 캐시 저장 시간은 1분입니다.
)

server {
        listen       8888;
        server_name  localhost;
        resolver 8.8.8.8 valid=300 ipv6=off;
        #设置dns解析地址,解析器的缓存时间300秒,每300秒重新解析一次,关闭ipv6
        resolver_timeout 3s;
        #解析超时的时间3秒
        proxy_read_timeout 30s;
        #读取代理服务器的超时时间,30s,默认是60s.
        proxy_send_timeout 30s;
        #向服务端发送数据的超时时间是30s,默认是60s.
        proxy_connect_timeout 30s;
        #和服务器建立连接的超时时间,30s,默认也是60s
        charset utf-8;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
            proxy_pass  $scheme://$http_host$request_uri;
            proxy_set_header Host $http_host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_set_header X-Forwarded-Host $host;
            proxy_set_header X-Forwarded-Port $server_port;
            #需要把客户端的真实ip,客户端的主机名,客户端的请求方式,服务端的端口,真实的ip地址添加在请求头当中
           # 请求转发到$url的地址,通过代理服务器地址可以直接访问百度 http://$url:端口
           # 设置页面的缓存:
            proxy_buffers 256 4k;
           #设置缓冲区为256个,大小是4k
            proxy_max_temp_file_size 0;
           # nginx服务器做为代理的时候暂时存放的响应数据的最大临时文件的大小为0,不使用临时文件
            proxy_cache_valid 200 302 1m;
           #当状态吗是200和302时,缓存的有效期是1分钟
            proxy_cache_valid 301 1h;
           #当状态吗是301,缓存的有效期是1小时
            proxy_cache_valid any 1m;
           #除了上述的三个状态吗,其他的缓存保存时间1分钟。

        }
  • 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

역방향 프록시

순방향 프록시의 경우 우리는 프록시 서버의 주소와 우리가 액세스하는 웹 서버를 알고 있습니다.

역방향 프록시에서는 클라이언트가 여전히 프록시 주소에 액세스하지만 어떤 특정 웹 서버에 액세스하는지 알 수 없습니다.
기능: 요청을 여러 백엔드 서버에 분산하여 서버 로드를 공유하고 시스템 가용성과 안정성을 제공합니다.
캐시 가속
안전 보호

레이어 4와 레이어 7 프록시의 차이점
정방향 프록시, 서버 및 http 모듈 위치
http 모듈은 7개의 레이어로 구성됩니다.

일곱 번째 계층은 http 프로토콜을 사용하고 구문 분석 및 처리를 요청할 수 있는 애플리케이션 계층입니다. 일곱 번째 계층 프록시는 사용자 모드, 애플리케이션 프로토콜 및 프로그램 기능을 사용합니다.
레이어 7의 처리 속도는 상대적으로 느리지만 더 고급 기능과 더 나은 사용자 경험을 제공할 수 있습니다.
도메인 이름 또는 IP+포트일 수 있습니다.

네 번째 계층은 전송 계층인 IP + 포트입니다. 요청은 심층적으로 분석 및 처리될 수 없습니다.
4계층 전달은 커널 상태에 있으며 커널 처리 및 커널 전달이 더 빠릅니다.
애플리케이션 시나리오: 7계층 프록시는 일반적으로 외부 액세스를 제공하며 요청을 처리해야 합니다. 보안, 필터링 및 흐름 제어가 포함되어 있습니다.
일반적으로 내부적으로 사용되는 4계층 프록시는 트래픽 및 요청에 대한 특별한 처리가 필요하지 않습니다.

역방향 프록시 = 로드 밸런싱
구성 방법:
일곱 번째 레이어는 http 모듈에만 작성할 수 있으며 명령은 업스트림입니다. http의 대형 모듈에만 작성할 수 있으며 서버나 위치에는 작성할 수 없습니다.
네 번째 레이어는 http 모듈 스트림이 아닌 전역 구성에서만 작성할 수 있습니다.

여기에 이미지 설명을 삽입하세요.

test2 192.168.11.137 프록시 - 역방향 프록시 구성
test3 192…168.11.138 백그라운드 서버
test4 192.168.11.139 백그라운드 서버
클라이언트: 구글 크롬

로드 밸런싱 알고리즘:
1. 라운드 로빈 rr 폴링 : 폴링 알고리즘은 가장 간단하고 기본적인 알고리즘이며, 기본 알고리즘이기도 합니다. 요청은 차례로 백엔드 서버에 배포됩니다.
폴링 알고리즘은 백엔드 서버 처리 기능이 동일한 상황에 적합합니다.그리고 방문 횟수가 많지 않은 경우에는 기본 알고리즘을 생략할 수 있습니다.

2. 가중치 폴링: 폴링을 기반으로 각 백엔드 서버에 서로 다른 가중치를 설정합니다. 트래픽 분포는 반드시 중량비에 따라 결정되는 것은 아닙니다.
가중치가 높은 사람은 폴링될 확률이 높고, 가중치가 낮은 사람은 폴링될 확률이 낮습니다.

백엔드 서버의 성능은 다릅니다. 성능이 높으면 가중치가 높아집니다. 성능이 낮으면 가중치가 작아집니다.
무게

http {

upstream xy102 {
       server 192.168.11.138 weight=3;
       server 192.168.11.139 weight=2;

    }
}

 server {
        listen       80;
        server_name  localhost;
        location / {
            root   html;
            index  index.html index.htm;
            proxy_pass http://xy102;
        }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

3. 가중치와 함께 사용되는 최소 연결 수 알고리즘
less_conn은 현재 연결 수가 적은 백엔드 서버에 요청을 보냅니다.
백엔드 서버가 다른 처리 작업을 수행하는 경우 더 강력한 처리 기능을 갖춘 서버에 요청이 집중되는 것을 방지할 수 있습니다.

4. ip_hash*로 세션을 유지하는 방법은 무엇입니까?

ip_hash는 알고리즘을 기반으로 클라이언트 IP 주소의 해시 값을 계산한 후 응답 서버로 요청을 전달합니다.
해당 웹 사이트에 처음 접속하면 해시 값이 계산되어 요청이 서버에 할당되지만, 클라이언트가 다음 번에 동일한 IP 주소를 사용하여 다시 접속하는 경우에는 다른 서버에 할당되지 않습니다. 또는 백그라운드 서버가 변경 사항을 보내면 액세스되는 서버가 변경됩니다.
**사용 시나리오: 높은 동시성** 클라이언트가 들어와서 서버를 계속 순환시키면 서버의 부담이 늘어납니다. 하나의 서버에 고정하면 프록시 서버에 대한 부담이 줄어들 뿐만 아니라 리소스도 절약됩니다.

nginx에서 세션을 유지하는 방법은 무엇입니까?
ip_hash는 세션 지속성을 달성할 수 있습니다.
sessionc 동적 페이지에서 세션을 구성합니다.

5. URL_hash는 요청된 URL 주소에 따라 해시 값을 처리한 후 전달합니다. 요청된 URL이 매번 동일할 경우 전달된 주소가 변경되면 백엔드 서버에서 캐시를 삭제합니다. 또는 백엔드 서버 수가 변경됩니다.

http {
upstream xy102 {
        hash $request_uri consistent;
       server 192.168.11.138 weight=4;
       server 192.168.11.139 weight=2;

    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

위의 내용은 모두 일곱 번째 계층에서 사용됩니다. 네 번째 계층에는 ip_hash 및 url_hash 알고리즘이 없습니다.

실험:

                                     基于域名实验负载均衡

给每个主机设置服务域名,去/etc/hosts中进行域名映射,重启nginx服务,进入虚拟机测试。
test2  192.168.11.137   客户端  www.xy33.com
test3 192..168.11.138   后台服务器  www.xy11.com
test4  192.168.11.139   后台服务器  www.xy22.com


[root@test2 conf]# vim nginx.conf
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
     upstream xy102 {
       server www.xy11.com weight=4;
       server www.xy22.com weight=2;

    }
    
    server {
        listen       80;
        server_name  www.xy33.com;
        }
[root@test2 conf]# vim /etc/hosts       
192.168.11.137   www.xy33.com
192.168.11.138   www.xy11.com
192.168.11.139   www.xy22.com



[root@test3 conf]# vim nginx.conf
 server {
        listen       80;
        server_name  www.xy11.com;
        }
        
[root@test3 conf]# vim /etc/hosts       
192.168.11.137   www.xy33.com
192.168.11.138   www.xy11.com
192.168.11.139   www.xy22.com


[root@test4 conf]# vim nginx.conf
 server {
        listen       80;
        server_name  www.xy22.com;
        }
        
[root@test4 conf]# vim /etc/hosts       
192.168.11.137   www.xy33.com
192.168.11.138   www.xy11.com
192.168.11.139   www.xy22.com
  • 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

4계층 프록시:
구성 방법은 전역 모듈에만 있을 수 있으며 상대적으로 알고리즘이 적고 IP+포트만 가능합니다.

test2  192.168.11.137   客户端      192.168.11.137:81
test3 192..168.11.138   后台服务器  192.168.11.138:8081
test4  192.168.11.139   后台服务器  192.168.11.139:8082
客户端配置页面负载均衡搞的


[root@test2 conf]# vim nginx.conf
events {
    worker_connections  1024;
}
stream {
    upstream test {
     server 192.168.11.138:8081 weight=2;
    server  192.168.11.139:8082 weight=2;

   }
    server {
    listen 81;
    proxy_pass  test;
}
}



[root@test3 conf]# vim nginx.conf
    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
        listen       8081;
        
        
[root@test4 conf]# vim nginx.conf
    #keepalive_timeout  0;
    keepalive_timeout  65;

    server {
        listen       8082;
  • 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

nginx 최적화
nginx 위치 매칭, 우선순위 및 리디렉션
nginx 정방향 프록시 및 역방향 프록시

토맥트
PHP와 마찬가지로 Tomcat은 동적 페이지를 처리하는 데 사용됩니다.
Tomcat은 웹 애플리케이션 서버로도 사용할 수 있으며 오픈 소스입니다.
PHP는 .php를 처리합니다.
nginx .html
톰캣 .jsp

Tomcat은 Java 코드로 작성된 프로그램이며 Java 웹 애플리케이션을 실행합니다.
톰캣의 특징과 기능:
1. 서비스 컨테이너: Java 서블릿 서버 측 Java 프로그램을 실행하고 클라이언트의 http 요청을 처리하고 응답합니다.
2. jsp 컨테이너 Javasever 페이지 이는 동적 페이지 기술이며 HTML 페이지에 Java 코드를 삽입할 수도 있습니다.
3. 또한 http 서버 자체이기도 합니다.
4. Tomcat은 가벼운 동적 페이지이며 동시성이 높은 시나리오에서는 사용되지 않습니다.

Tomcat 최적화: Tomcat 자체 최적화는 물론 시스템 커널 최적화 및 jvm 최적화.

**서블릿:**은 웹 애플리케이션을 개발하는 데 사용되는 Java 언어의 핵심 구성 요소입니다.
http 요청을 처리하고, 동적 콘텐츠를 생성하고, 클라이언트 요청에 응답합니다.
http 요청 처리
동적 콘텐츠 생성
Java에서 비즈니스 로직 처리
세션관리, 사용자 상태정보 유지, 장바구니 동기화, 사용자 로그인 등
nginx 동적 요청을 데이터베이스로 전달할 수도 있습니다.

jsp:
웹 애플리케이션의 인터페이스, 이 인터페이스의 언어는 Java로 구현됩니다.
.jsp로 끝나는 파일
인덱스.jsp

톰캣 구성요소:
커넥터: 외부 요청을 수락하고 응답하는 역할을 담당합니다. Tomcat과 클라이언트 간의 통신을 위한 허브입니다. 수신 포트는 처리가 완료된 후 커넥터로 반환된 다음 클라이언트에 응답합니다.

커넥터: 비즈니스 로직 처리를 담당하는 Engin 호스트 컨텍스트 래퍼는 네 가지 기능으로 구성됩니다.
엔진: 여러 가상 호스트를 관리합니다. 서비스에는 엔진이 하나만 있고 엔진에는 호스트가 여러 개 있을 수 있습니다.
호스트: 호스트는 사이트라고도 불리는 호스트입니다. 호스트를 구성하면 여러 사이트를 추가할 수 있습니다.
context: 컨텍스트는 웹 애플리케이션을 나타냅니다.
래퍼: 래퍼, 가장 낮은 수준의 논리를 처리하는 데 사용됩니다.

서비스: 커넥터, 컨테이너 등 외부 서비스를 외부에 제공합니다.
Tomcat은 여러 서비스를 가질 수 있으며 각 서비스는 서로 독립적입니다.

여기에 이미지 설명을 삽입하세요.

Tomcat 디렉토리의 역할:
1. bin은 tomcat 스크립트를 시작하고 종료하는 파일을 저장합니다. 시작.sh 종료.sh

2. conf는 Tomcat의 기본 구성 파일인 server.xml 기본 구성 파일 context.xml을 저장합니다: 호스트의 기본 구성 정보
tomcat-user.xml : 로그인 시 사용자 및 비밀번호 인증 관련 정보입니다. 관리자 파일을 열려면 먼저 승인을 받고 수정해야 합니다.

3. lib: Tomcat이 실행될 때 필요한 jar 패키지입니다.일반적으로 움직이지 않음

4. 로그: 로그 파일, catalina.out 메인 로그 파일

5. Temp: Tomcat 실행 시 생성된 파일을 저장합니다.

6. webapps: nginx의 html과 유사한 웹 애플리케이션 배포용 디렉터리

------主要目录说明----------------------------------------------------------------------------------------------
●bin:存放启动和关闭Tomcat的脚本文件,比较常用的是 catalina.sh、startup.sh、shutdown.sh三个文件
●conf:存放Tomcat 服务器的各种配置文件,比较常用的是 server.xml、context.xml、tomcat-users.xml、web.xml 四个文件。
① server.xml: Tomcat的主配置文件,包含Service,Connector,Engine,Realm,Valve,Hosts主组件的相关配置信息;
② context.xml:所有host的默认配置信息;
③ tomcat-user.xml:Realm认证时用到的相关角色、用户和密码等信息,Tomcat自带的manager默认情况下会用到此文件,在Tomcat中添加/删除用户,为用户指|定角色等将通过编辑此文件实现;
④ web.xml:遵循Servlet规范标准的配置文件,用于配置servlet,并为所有的web应用程序提供包括MIME映射等默认配置信息;
●lib:存放Tomcat运行需要的库文件的jar 包,一般不作任何改动,除非连接第三方服务,比如 redis,那就需要添加相对应的jar 包
●logs:存放 Tomcat 执行时的日志
●temp:存放 Tomcat 运行时产生的文件
●webapps:存放 Tomcat 默认的 Web 应用部署目录
●work:Tomcat工作日录,存放jsp编译后产生的class文件,一般清除Tomcat缓存的时候会使用到
●src:存放Tomcat 的源代码
●doc:存放Tomcat文档
----------------------------------------------------------------------------------------------------------

查看manager文件:
cd /usr/local/tomcat/webapps/manager/META-INF
vim context.xml

<Context antiResourceLocking="false" privileged="true" >
  <Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow=".*" /> #允许所有主机访问。


在conf,tomcat-users.xml中,添加账户密码
<role rolename="manager-gui"/>
<user username="tomcat" password="tomcat" roles="manager-gui"/>

  • 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
---------------------Tomcat 虚拟主机配置-------------------------
很多时候公司会有多个项目需要运行,一般不会是在一台服务器上运行多个 Tomcat 服务,这样会消耗太多的系统资源。此时, 就需要使用到 Tomcat 虚拟主机。
例如现在新增两个域名 www.kgc.com 和 www.benet.com, 希望通过这两个域名访问到不同的项目内容。

1.创建 kgc 和 benet 项目目录和文件
mkdir /usr/local/tomcat/webapps/kgc   
mkdir /usr/local/tomcat/webapps/benet
echo "This is kgc page!" > /usr/local/tomcat/webapps/kgc/index.jsp
echo "This is benet page!" > /usr/local/tomcat/webapps/benet/index.jsp

2.修改 Tomcat 主配置文件 server.xml
vim /usr/local/tomcat/conf/server.xml
--165行前--插入
<Host name="www.kgc.com" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
	<Context docBase="/usr/local/tomcat/webapps/kgc" path="" reloadable="true" />
</Host>   

<Host name="www.benet.com" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
	<Context docBase="/usr/local/tomcat/webapps/benet" path="" reloadable="true" />
</Host>

----------------------------------------------------------------------------------------------------------
Host name:主机名
appBase:Tomcat程序工作目录,即存放web应用程序的目录;相对路径为webapps,绝对路径为 /usr/local/tomcat/webapps
unpackWARs:在启用此webapps时是否对WAR格式的归档文件先进行展开;默认为true
autoDeploy:在Tomcat处于运行状态时放置于appBase目录中的应用程序文件是否自动进行deploy;默认为true
xmlValidation:是否验证xml文件执行有效性检验的标志
xmlNamespaceAware:是否启用xml命名空间,设置该值与xmlValidation为true,表示对web.xml文件执行有效性检验

docBase:相应的Web应用程序的存放位置;也可以使用相对路径,起始路径为此Context所属Host中appBase定义的路径;
path:相对于Web服务器根路径而言的URI;如果为空“”,则表示为此webapp的根路径 / ;
reloadable:是否允许重新加载此context相关的Web应用程序的类;默认为false
  • 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
---------------------Tomcat 服务部署-------------------------
在部署 Tomcat 之前必须安装好 jdk,因为 jdk 是 Tomcat 运行的必要环境。
1.关闭防火墙,将安装 Tomcat 所需软件包传到/opt目录下
jdk-8u201-linux-x64.rpm
apache-tomcat-9.0.16.tar.gz

systemctl stop firewalld
systemctl disable firewalld
setenforce 0

2.安装JDK
cd /opt
rpm -ivh jdk-8u201-linux-x64.rpm 
java -version

3.设置JDK环境变量
vim /etc/profile.d/java.sh
export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
export PATH=$JAVA_HOME/bin:$PATH

export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64:
这个命令设置了一个名为JAVA_HOME的环境变量,它指向Java JDK的安装路径。
这对于告诉系统和其他应用程序Java的安装位置非常重要。你需要将路径替换为你实际安装Java的路径。

export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:
这个命令设置了一个名为CLASSPATH的环境变量,它用于指定Java类的搜索路径。
在这个命令中,.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar 表示当前目录(.)
以及Java工具库(tools.jar)和Java远程调试库(dt.jar)的路径。这些库通常包含一些Java开发所需的类。

export PATH=$JAVA_HOME/bin:$PATH:
这个命令将Java可执行文件的路径添加到系统的PATH环境变量中。
这使得你可以在终端中直接运行Java工具,而不需要输入完整的路径。
这将Java的bin目录添加到了PATH中,使得java、javac等命令可以直接运行。

source /etc/profile.d/java.sh
java -version

----------------------------------------------------------------------------------------------------------
CLASSPATH:编译、运行Java程序时,JRE会去该变量指定的路径中搜索所需的类(.class)文件。
dt.jar:是关于运行环境的类库,主要是可视化的 swing 的包。
tools.jar:主要是一些jdk工具的类库,包括javac、java、javap(jdk自带的一个反编译工具)、javadoc等。
JDK (Java Development Kit):JDK是Java开发工具包,它是用于开发Java应用程序的软件包。
JDK包括了编译器(javac)、调试器、各种工具、Java标准类库(Java API)、以及Java文档等。
JDK是开发者用来创建、编译和运行Java应用程序的重要组件。

JRE (Java Runtime Environment):JRE是Java运行时环境,它是用于执行Java应用程序的部分。
JRE包括了Java虚拟机(JVM)以及Java类库(Java API),这使得用户能够在计算机上运行已编译的Java程序,
而不需要进行开发。JRE是终端用户需要安装的部分,以便能够运行Java应用程序。

JVM (Java Virtual Machine):JVM是Java虚拟机,它是Java应用程序在计算机上运行的核心组件。
JVM负责将编译后的Java字节码(.class文件)解释或编译成本地机器码,以便计算机能够执行它。
JVM提供了内存管理、垃圾回收、线程管理等功能,以确保Java程序在不同平台上具有相似的行为。
----------------------------------------------------------------------------------------------------------

首先使用文本工具编写java源代码,比如 Hello.java ;
在命令行中,输入命令:javac 
  • 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
首先使用文本工具编写java源代码,比如 Hello.java ;
在命令行中,输入命令:javac Hello.java,对源代码进行编译,生成 class 字节码文件;
编译完成后,如果没有报错信息,输入命令:java Hello,运行 class 字节码文件,由 JVM 对字节码进行解释和运行,
打印 “Hello World”。


vim Hello.java

public class Hello {			
  public static void main(String[] args){
    System.out.println("Hello world!");
  }
}

javac Hello.java
java Hello


public: 这是一个访问修饰符,表示类是公共的,可以从其他地方访问。
class: 关键字用于定义一个类。
Hello: 这是类的名称,这里是一个叫做 "Hello" 的类。


public static void main(String[] args){
public: 访问修饰符,表示这个方法是公共的,可以从其他地方访问。
static: 静态修饰符,表示这个方法属于类而不是实例,可以通过类名直接调用。
void: 这是方法的返回类型,void 表示方法没有返回值。
main: 这是方法的名称,是程序的入口点,当程序运行时会从这里开始执行。
(String[] args): 这是方法的参数列表,args 是一个字符串数组,可以在命令行传递参数给程序。

System.out.println("Hello world!");
System.out: System 是一个类,out 是这个类的一个静态成员,它代表标准输出流。
println: 这是输出方法的名称,它会在控制台输出一行内容。
"Hello world!": 这是要输出的内容,是一个字符串。

4.安装启动Tomcat
cd /opt
tar zxvf apache-tomcat-9.0.16.tar.gz
mv apache-tomcat-9.0.16 /usr/local/tomcat
##启动tomcat ##
#后台启动
/usr/local/tomcat/bin/startup.sh 
或
/usr/local/tomcat/bin/catalina.sh start
	
#前台启动
/usr/local/tomcat/bin/catalina.sh run		

netstat -natp | grep 8080

浏览器访问Tomcat的默认主页 http://192.168.233.21:8080

5.优化tomcat启动速度
第一次启动tomcat可能会发现 Tomcat 启动很慢,默认情况下可能会需要几十秒,可以修改jdk参数进行改。
vim /usr/java/jdk1.8.0_201-amd64/jre/lib/security/java.security
--117行--修改
securerandom.source=file:/dev/urandom
----------------------------------------------------------------------------------------------------------
/dev/urandom是/dev/random的非阻塞版本,/dev/random的 random pool 依赖于系统中断,因此在系统的中断数不足时,
/dev/random 设备会一直封锁,尝试读取的进程就会进入等待状态,直到系统的中断数充分够用,
/dev/random设备可以保证数据的随机性。 /dev/urandom不依赖系统的中断,也就不会造成进程忙等待,
但是数据的随机性也不高,所以该随机数的安全性理论上不高。如果应用对安全性要求很高,那么应该使用/dev/random。
  • 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

Tomcat은 매우 느리게 시작됩니다. 기본적으로 jdk 매개변수를 수정하여 변경할 수 있습니다.
vim /usr/java/jdk1.8.0_201-amd64/jre/lib/security/java.security
– 117행 – 수정
securerandom.source=파일:/dev/urandom

/dev/urandom은 /dev/random의 비차단 버전입니다. /dev/random의 무작위 풀은 시스템 인터럽트에 의존합니다. 따라서 시스템 인터럽트 수가 충분하지 않은 경우
/dev/random 장치는 항상 차단되며, 읽으려는 프로세스는 시스템의 인터럽트 수가 충분할 때까지 대기 상태로 들어갑니다.
/dev/random 장치는 데이터의 무작위성을 보장할 수 있습니다. /dev/urandom은 시스템 인터럽트에 의존하지 않으므로 프로세스가 바쁜 대기 상태로 만들지 않습니다.
그러나 데이터의 무작위성이 높지 않기 때문에 난수의 보안성은 이론적으로 높지 않습니다. 응용 프로그램의 보안 요구 사항이 높은 경우 /dev/random을 사용해야 합니다.


  • 1